好程式設計師教程分享Java註解和運用註解程式設計

好程式設計師IT發表於2019-07-24

  好程式設計師教程分享 Java註解和運用註解程式設計 註解 和使用

先來看下概念首先從註釋來看;

註釋:給程式碼新增說明和解釋,註釋幫助開發人員理解程式。(Comment) 說白點就是註釋是給人看的。

註解:給程式碼新增說明 解釋 ,這個說明給程式使用。(Annotation)

從 JDK 5.0 開始,Java 增加了對後設資料(MetaData) 的支援, 也就是Annotation(註解)。

三個基本的 Annotation:

@Override:限定重寫父類方法, 該註解只能用於方法

@Deprecated:用於表示某個程式元素(類, 方法等)已過時

@SuppressWarnings: 抑制編譯器警告.

什麼是註解

Annotation其實就是程式碼裡的特殊標記, 它用於替代配置檔案,也就是說,傳統方式透過配置檔案告訴類如何執行,有了註解技術後,開發人員可以透過註解告訴類如何執行。在Java技術裡註解的典型應用是:可以透過反射技術去得到類裡面的註解,以決定怎麼去執行類。

註解技術的要點:

如何定義註解

如何反射註解,並根據反射的註解資訊,決定如何去執行類

2.1 自定義註解:

定義新的 Annotation 型別使用@interface關鍵字

宣告註解的屬性


註解屬性的作用:原來寫在配置檔案中的資訊,可以透過註解的屬性進行描述。
Annotation的屬性宣告方式:String name();
屬性預設值宣告方式:Stringname() default “xxx”;
特殊屬性value:如果註解中有一個名稱value的屬性,那麼使用註解時可以省略value=部分,如@MyAnnotation(“xxx")
特殊屬性value[];


註解屬性的型別可以是:
    String型別
    基本資料型別
    Class型別
    列舉型別
    註解型別
    以上型別的一維陣列

案例演示1 建立和使用註解


public   @interface   MyAnnocation  {
     String  name ();
     int  num () default   10 ;
    MyAnnocation2 anno ();
}
public   @interface   MyAnnocation2  {
     String  value ();
}

public   class   Demo1  {
     @MyAnnocation ( name = "哈哈" , num = 50 , anno = @MyAnnocation2 ( value  =   "xxx" ))
     public   void  show () {
        System . out . println ( "xxxxxxx" );
     }
}

2.2 JDK的元 Annotation

元 Annotation指修飾Annotation的Annotation。

@Retention : 只能用於修飾一個 Annotation 定義, 用於指定該 Annotation 可以保留的域, @Rentention 包含一個 RetentionPolicy 型別的成員變數, 透過這個變數指定域。


RetentionPolicy.CLASS: 編譯器將把註解記錄在 class檔案中. 當執行 Java 程式時, JVM 不會保留註解. 這是預設值
RetentionPolicy.RUNTIME:編譯器將把註解記錄在 class檔案中. 當執行 Java 程式時, JVM 會保留註解. 程式可以透過反射獲取該註釋
RetentionPolicy.SOURCE: 編譯器直接丟棄這種策略的註釋

@Target :指定註解用於修飾類的哪個成員.@Target 包含了一個名為value,型別為ElementType的成員變數。

@Documented:用於指定被該元 Annotation 修飾的Annotation類將被 javadoc 工具提取成文件。

@Inherited:被它修飾的 Annotation 將具有繼承性.如果某個類使用了被 @Inherited 修飾的Annotation,則其子類將自動具有該註解。

案例演示2 使用反射獲取註解資訊


@Retention ( RetentionPolicy . RUNTIME )
public   @interface   PersonInfo  {
     String  name ();
     int  age () default   20 ;
     String  gender ();
}

public   class   PersonOpe  {
     @PersonInfo ( name = "李四" , age = 20 , gender = "男" )
     public   void  show ( String  name , int  age , String  gen ) {
        System . out . println ( name );
        System . out . println ( age );
        System . out . println ( gen );
     }
}
public   class   Demo2  {
     public   static   void  main ( String [] args ) throws  Exception {
        PersonOpe ope = new  PersonOpe ();
        Class <?>  class1 = PersonOpe . class ;
        Method method  =  class1 . getMethod ( "show" , String . class , int . class , String . class );
        PersonInfo annotation  =  method . getAnnotation ( PersonInfo . class );
         String  name = annotation . name ();
         int  age = annotation . age ();
         String  gender = annotation . gender ();
        method . invoke ( ope , name , age , gender );
        
     }
}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2651635/,如需轉載,請註明出處,否則將追究法律責任。

相關文章