什么是注解:用來描述數據的數據(元數據)。
Java代碼里的特殊標記。它為代碼中添加用Java程序無法表達的額外信息提供一種形式化的方法,使用我們可以在未來的某一個時刻方便的使得這些注解修飾的程序元素。
作用:
用將由編譯器來測試和驗證的格式,存儲有關程序額外信息
生成 描述符文件,甚至是新的類定義
減輕編寫模板代碼的負擔
使代碼更加干凈易讀
注解和注釋不同注解與普通的代碼注釋有一定的區別,也有一定的聯系。注解和注釋都屬于對代碼的描述;
注釋的作用只是簡單的描述程序的信息,它不會被程序所讀取;
注解則是Java代碼中的特殊標記,這些標記可以在編譯、類加載、運行時被讀取,并執行相應的處理
通過使用注解,程序開發人員可以在不改變原有邏輯的情況下在源文件中嵌入一些補充的信息,代碼分析工具、開發工具和部署工具可以通過這些補充信息進行驗證或者部署。
二、注解語法使用注解時要在基前面加“@” 符號,同時將注解作為修飾符使用
所有的注解都繼承了java.lang.annotation包下的Annotation接口
注解語法規范
內建注解(也稱為基本注解),定義于java.lang包下
元注解(Meta Annotation)
自定義注解
使用@interface自定義注解


@Override只能用于修飾方法,而不能修飾其它的元素。
@Deprecated注解 private String name; private String pwd; //標示這個屬性已經過時,會在這個屬性或者方法 名上加上刪除線 @Deprecated private int age; @Deprecated public String getName() { return name; }
@SuppressWarnings("unused") public static void main(String[] args) { //沒有定義泛型 @SuppressWarnings("rawtypes") List list=new ArrayList();
元注解用來修飾其它的注解位于java.lang.annotation下
元注解(Meta Annotation)



使用@interface 關鍵字
注解類型和接口的相似之處
都可以定義常量,靜態成員(如枚舉類型定義)。注解類型也可以像接口一樣被實現或者被繼承

package com.pb.annotation.diy;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Inherited;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** *自定義注解需要使用@interface關鍵字 * *///設置注解可以為javadoc獲取為幫助文檔@Documented/* * @Retention有如下參數(注解的生命周期) * RetentionPolicy.SOURCE:注解被編譯器丟棄 * RetentionPolicy.CLASS:注解保存在class類當中,被虛擬機忽略 * RetentionPolicy.RUNTIME:注解被保存在class類當中,被虛擬機讀取 * */@Retention(RetentionPolicy.RUNTIME)/* * target 有如下參數: * TYPE : 注解目標是類、接口 * FIELD: 注解目標是字段 * METHOD:注解目標是方法 * PARAMETER:注解目標是方法的參數 * CONSTRUCTOR:注解目標是構造函數 * LOCAL_VARIABLE:注解目標是局部變量 * */@Target(value={ElementType.METHOD,ElementType.TYPE,ElementType.FIELD})/* * 可以被繼承 */@Inheritedpublic @interface MyAnnotation { //設置注解成員變量并賦初始值 String name() default "張三"; int age() default 21; }讀取注解信息

package com.pb.annotation.diy;import java.lang.annotation.Annotation;public class MyAnnotationTest { @MyAnnotation(name="Jack",age=32) public void getInfo(){ try { //獲取當前getInfo()方法中包含的所有注解 @MyAnnotation Annotation [] annos=MyAnnotationTest.class.getMethod("getInfo").getAnnotations(); //注解數組 for (Annotation an : annos) { if(an instanceof MyAnnotation){ System.out.println("an 是"+an); System.out.println("注解中的name:"+((MyAnnotation) an).name()); System.out.println("注解中的age:"+((MyAnnotation) an).age()); } } } catch (NoSuchMethodException | SecurityException e) { e.printStackTrace(); } } public static void main(String[] args) { MyAnnotationTest mt=new MyAnnotationTest(); mt.getInfo(); }}新聞熱點
疑難解答