Java注解學習

為什么要學習注解

  1. 看懂別人的代碼
  2. 會用注解 編程簡潔 代碼清晰
  3. 讓別人高看一眼(會自定義注解)

注解的概念

Java 提供了一種原程序中的元素關(guān)聯(lián)任何信息和任何元數(shù)據(jù)的途徑和方法。

Java中的常見注解

@Override
@De

注解的分類

  1. 源碼注解:注解只在源碼中存在,編譯稱.class 文件就不存在了。
  2. 編譯時注解:注解在源碼和編譯文件中都存在。
  3. 運行時注解:在運行階段仍舊起作用,甚至會影響運行邏輯的注解。
  4. 元注解:注解的注解

自定義注解的語法要求

  1. 類使用@interface 關(guān)鍵字定義注解
  2. 注解的成員類型是受限的,合法的類型包括原始類型及String,Class,Annotation,Enumeration
  3. 如果注解只有一個成員,則成員名必須為value() ,在使用時可以忽略成員名和賦值號(=)
  4. 注解可以沒有成員,稱為標示注解
public @interface Description{
    String desc(); // 成員無參 無異常拋出
    String author();
    int age() default 18;
}

元注解

@Target({ElementType.METHOD,ElementType.TYPE})// 注解的作用域
@Retention(RetentionPolicy.RUNTIME)// 生命周期 source class runtime
@Inherited //  允許子類繼承
@Documented // 生成 javadoc 的時候會包含注解信息
public @interface Description {
    String desc();
    String author();
    int age() default 18;
}

使用自定義注解

    @<注解名>(<成員名1>=<成員值1>,<成員名2>=<成員名2>,...)

    @Description(desc = "I am eyeColor",author = "Somebody",age = 18)
    public String eyeColor(){
        return "red";
    }

解析注解

通過反射獲取類、函數(shù)或成員上的運行時注解信息,從而實現(xiàn)動態(tài)控制程序運行的邏輯。

public class ParseAnn {
    public static void main(String[] args){
        // 1. 使用類加載器加載類
        try {
            Class c = Class.forName("MapDemo");
            //2 找到類上面的注解
            boolean isExist = c.isAnnotationPresent(Description.class);
            if (isExist){
                // 3. 拿到注解實例
                Description d = (Description) c.getAnnotation(Description.class);
                System.out.print(d.desc());
            }
            // 4. 找到方法上的注解
            Method[] ms = c.getMethods();
            for (Method m:ms
                 ) {
                boolean isMExist = m.isAnnotationPresent(Description.class);
                if (isMExist){
                    Description d = m.getAnnotation(Description.class);
                    System.out.print(d.desc());
                }

            }
            for (Method m:ms
                 ) {
                Annotation[] as = m.getAnnotations();
                for (Annotation a: as
                     ) {
                    if (a instanceof Description){
                        Description d = (Description) a;
                        System.out.print(d.desc());
                    }
                }
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,217評論 25 708
  • 難得,也算百年不遇,需要值班時,我留了下來。而只比我女兒大兩歲的小同事,在下午就自告奮勇要陪我,所以待其他姐妹...
    田園1981閱讀 266評論 2 3
  • 黃義達,新加坡歌手,2004年出道臺灣…… “2007年是黃義達比較艱難的一年,發(fā)生很多的事情,個人感情不順、家里...
    35f8a119f405閱讀 5,236評論 1 2
  • 沒有現(xiàn)金的狀態(tài)已持續(xù)大半個月。 下午臨時起意去頤和園, 到售票口才想起口袋沒現(xiàn)金, 不打算原路返回, 故決定找買票...
    西西復嘻嘻閱讀 189評論 0 0
  • “泡椒”之后君諾從沒一個人去過超市,因為琳瑯滿目的商品對他來說都是回憶,就是這回憶會讓他傷感好久,所以這就是他小...
    蘇君諾閱讀 281評論 0 0

友情鏈接更多精彩內(nèi)容