久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      如何更好地使用java注解

      如何更好地使用java注解

      什么是注解?

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

      我們可以把注解理解為代碼里的特殊標(biāo)記,這些標(biāo)記可以在編譯,類加載,運(yùn)行時(shí)被讀取,并執(zhí)行相應(yīng)的處理。通過注解,開發(fā)人員可以在不改變?cè)写a和邏輯的情況下,在源代碼中嵌入補(bǔ)充信息。

      1、注解的作用

      編寫文檔:通過代碼里標(biāo)識(shí)的注解生成文檔【生成文檔doc文檔】

      代碼分析:通過代碼里標(biāo)識(shí)的注解對(duì)代碼進(jìn)行分析【使用反射】

      編譯檢查:通過代碼里標(biāo)識(shí)的注解讓編譯器能夠?qū)崿F(xiàn)基本的編譯檢查【@Override】

      2、JDK中預(yù)定義的注解

      @Override

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

      @Deprecated

      該注解標(biāo)識(shí)的內(nèi)容,表示已過時(shí),使用的時(shí)候,會(huì)有一個(gè)橫線。

      SuppressWarnings

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

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

      3、自定義注解

      格式

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

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

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

      屬性:

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

      要求:

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

      基本數(shù)據(jù)類型

      String

      枚舉

      注解

      以上類型的數(shù)組

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

      注意:

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

      如果定義屬性時(shí),使用default關(guān)鍵字給屬性默認(rèn)初始化值,則使用時(shí),可以不用給屬性賦值;

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

      數(shù)組賦值時(shí),值使用{}包裹。如果數(shù)組中只有一個(gè)值,則{}可以省略。

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

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

      @Target

      當(dāng)前被描述的注解能夠作用的位置,該注解只有一個(gè)屬性是value,返回值是ElementType枚舉類型的數(shù)組。

      ElementType 的常用值:

      TYPE:可以作用于類上

      METHOD:可以作用于方法上

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

      @Rentention

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

      RetentionPolicy 的值

      SOURCE:當(dāng)前被描述的注解,不會(huì)保留到class文件中

      CLASS:當(dāng)前被描述的注解,會(huì)保留到class字節(jié)碼文件中,但是不會(huì)被JVM讀取到

      RUNTIME:當(dāng)前被描述的注解,會(huì)保留到class字節(jié)碼文件中,并被JVM讀取到,自定義的值,一般都取這個(gè)值

      @Documented

      當(dāng)前被描述的注解是否被抽取到api文檔中

      @Inherited

      當(dāng)前被描述的描述注解是否被子類繼承

      一般經(jīng)常用到的是前兩個(gè)元注解。

      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 {         //獲取這個(gè)類的class對(duì)象         Class<UseAnno> useAnnoClass = UseAnno.class;         //獲取指定的注解類子類對(duì)象         pro proAnno = useAnnoClass.getAnnotation(pro.class);         //執(zhí)行注解中的方法,獲取注解中屬性的值         String className = proAnno.className();         String methodName = proAnno.methodName();     }

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

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

      推薦教程:java開發(fā)入門

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)