站長資訊網
        最全最豐富的資訊網站

        如何更好地使用java注解

        如何更好地使用java注解

        什么是注解?

        注解(Annotation),也叫元數據。一種代碼級別的說明。它是JDK1.5及以后版本引入的一個特性,與類、接口、枚舉是在同一個層次。它可以聲明在包、類、字段、方法、局部變量、方法參數等的前面,用來對這些元素進行說明,注釋。

        我們可以把注解理解為代碼里的特殊標記,這些標記可以在編譯,類加載,運行時被讀取,并執行相應的處理。通過注解,開發人員可以在不改變原有代碼和邏輯的情況下,在源代碼中嵌入補充信息。

        1、注解的作用

        編寫文檔:通過代碼里標識的注解生成文檔【生成文檔doc文檔】

        代碼分析:通過代碼里標識的注解對代碼進行分析【使用反射】

        編譯檢查:通過代碼里標識的注解讓編譯器能夠實現基本的編譯檢查【@Override】

        2、JDK中預定義的注解

        @Override

        檢測被該注解標注的方法是否是繼承自父類(接口)的。

        @Deprecated

        該注解標識的內容,表示已過時,使用的時候,會有一個橫線。

        SuppressWarnings

        壓制警告,一般傳遞參數all @SuppressWarnings(“all”)。

        (視頻教程推薦:java視頻)

        3、自定義注解

        格式

        public @interface 注解名稱 { 	屬性列表; }

        本質:注解本質上就是一個接口,該接口默認繼承Annotation接口,可以通過javap 類名.class命令反編譯class文件

        public interface MyAnno extends java.lang.annotation.Annotation { }

        屬性:

        注解中的屬性,就是接口中的抽象方法。

        要求:

        屬性的返回值類型只能是以下類型

        基本數據類型

        String

        枚舉

        注解

        以上類型的數組

        public @interface MyAnno {     int age();     String name();     //枚舉類型     Person per();     //注解類型     MyAnno2 anno2();     //數組類型     String[] strs(); }  //枚舉類Person public enum Person {     P1,P2; }

        注意:

        定義了屬性,在使用時必須給屬性賦值,多個屬性之間用逗號隔開,所以,一般注解中方法名一般取成屬性名;

        如果定義屬性時,使用default關鍵字給屬性默認初始化值,則使用時,可以不用給屬性賦值;

        如果只有一個屬性需要賦值,并且屬性的名稱是value,則value可以省略,直接定義屬性值;

        數組賦值時,值使用{}包裹。如果數組中只有一個值,則{}可以省略。

        @MyAnno(age=20, name="zhangsan", per=Person.P1, anno2=@MyAnno2, strs={"zhangsan","lisi"}) public class Test { }

        元注解:用于描述注解的注解

        @Target

        當前被描述的注解能夠作用的位置,該注解只有一個屬性是value,返回值是ElementType枚舉類型的數組。

        ElementType 的常用值:

        TYPE:可以作用于類上

        METHOD:可以作用于方法上

        FIELD:可以作用于成員變量上

        @Rentention

        描述注解被保留的階段,該注解只有一個屬性value,返回值是RetentionPolicy枚舉類型

        RetentionPolicy 的值

        SOURCE:當前被描述的注解,不會保留到class文件中

        CLASS:當前被描述的注解,會保留到class字節碼文件中,但是不會被JVM讀取到

        RUNTIME:當前被描述的注解,會保留到class字節碼文件中,并被JVM讀取到,自定義的值,一般都取這個值

        @Documented

        當前被描述的注解是否被抽取到api文檔中

        @Inherited

        當前被描述的描述注解是否被子類繼承

        一般經常用到的是前兩個元注解。

        4、注解的使用

        在程序中使用注解:獲取這幾中定義的屬性值

        // pro 注解 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface pro {     String className();     String methodName(); }  //在程序中使用注解 @pro(className="anli.Demo1", methodName = "show1") public class UseAnno {     public static void main(String[] args) throws Exception {         //獲取這個類的class對象         Class<UseAnno> useAnnoClass = UseAnno.class;         //獲取指定的注解類子類對象         pro proAnno = useAnnoClass.getAnnotation(pro.class);         //執行注解中的方法,獲取注解中屬性的值         String className = proAnno.className();         String methodName = proAnno.methodName();     }

        通過Class類中的getAnnotation()方法,獲得的是注解類的實現類的對象,有了對象,就可以執行注解中的方法,返回值就是使用注解時設置的屬性值。其實就是在內存中生成了一個該注解接口的子類實現對象

        	 public class ProImpl implements Pro{           public String className(){                return "cn.itcast.annotation.Demo1";            }            public String methodName(){                return "show";            }        }

        推薦教程:java開發入門

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 久久99精品久久久久久9蜜桃| 久久久久亚洲精品无码网址 | 精品人妻少妇一区二区三区在线| 精品无码AV无码免费专区| 久久精品中文字幕有码| 91探花国产综合在线精品| 精品国产v无码大片在线观看| 亚洲国产精品无码久久久久久曰 | 久久精品国产亚洲AV无码娇色| 日韩精品无码免费视频| 国产精品美女久久久久av爽 | 久久久九九有精品国产| 国产精品女同久久久久电影院| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 国产精品户外野外| 四虎国产精品永久一区| 国产福利微拍精品一区二区| 久久精品人人做人人爽电影蜜月 | 久久亚洲精品无码播放| 99热日韩这里只有精品| 久久99精品国产一区二区三区| 潮喷大喷水系列无码久久精品| 人妻少妇精品中文字幕AV| 自拍偷自拍亚洲精品被多人伦好爽| 欧美精品免费专区在线观看| 久久精品无码一区二区三区日韩| 国产精品秘入口福利姬网站 | 日韩精品一区二区三区四区| 国产精品一二三区| 国产欧美国产精品第一区| 国产成人精品日本亚洲专一区| 国产女主播精品大秀系列| 久久国产精品无码HDAV| 久久ww精品w免费人成| 国产女人精品视频国产灰线| 国产成人精品日本亚洲网站 | 一本一本久久A久久综合精品| 亚洲一区精品伊人久久伊人 | 在线精品亚洲| 亚洲Av永久无码精品三区在线| 色欲久久久天天天综合网精品 |