註解基礎知識點
定義:註解(Annotation),也叫元數據。一種代碼級別的說明。它是JDK1.5及以後版本引入的一個特性,與類、接口、枚舉是在同一個層次。它可以聲明在包、類、欄位、方法、局部變數、方法參數等的前面,用來對這些元素進行說明,注釋。
作用分類:
①編寫文檔:通過代碼里標識的元數據生成文檔【生成文檔doc文檔】
② 代碼分析:通過代碼里標識的元數據對代碼進行分析【使用反射】
③編譯檢查:通過代碼里標識的元數據讓編譯器能夠實現基本的編譯檢查【Override】
基本介紹
- 中文名:Java 註解
- 外文名:Annotation
- 別名:元數據
- 含義:一種代碼級別的說明
JAVA註解
元數據的作用
元註解
基本內置註解
Java代碼/** * 測試Override註解 * @author Administrator */public class OverrideDemoTest { //@Override public String tostring() { return "測試註解"; }}
Java代碼/** * 測試Deprecated註解 * @author Administrator */public class DeprecatedDemoTest { public static void main(String[]args) { // 使用DeprecatedClass里聲明被過時的方法 DeprecatedClass.DeprecatedMethod(); }}class DeprecatedClass { @Deprecated public static void DeprecatedMethod() { }}
Java代碼import java.util.ArrayList;import java.util.List;public class SuppressWarningsDemoTest { public static List list = new ArrayList(); @SuppressWarnings("unchecked") public void add(String data) { list.add(data); }}
自定義註解
Java代碼public @interface NewAnnotation {}
Java代碼public class AnnotationTest { @NewAnnotation public static void main(String[]args) { }}
Java代碼public @interface NewAnnotation { String value();}
Java代碼public class AnnotationTest { @NewAnnotation("mainmethod") public static void main(String[]args) { saying(); } @NewAnnotation(value="saymethod") public static void saying() { }}
public @interface Greeting { public enum FontColor { BLUE, RED, GREEN }; String name(); FontColor fontColor() default FontColor.RED;}
Java代碼public class AnnotationTest { @NewAnnotation("mainmethod") public static void main(String[]args) { saying(); sayHelloWithDefaultFontColor(); sayHelloWithRedFontColor(); } @NewAnnotation("saymethod") public static void saying() { } // 此時的fontColor為默認的RED @Greeting(name="defaultfontcolor") public static void sayHelloWithDefaultFontColor() { } // 將fontColor改為BLUE @Greeting(name="notdefault", fontColor=Greeting.FontColor.BLUE) public static void sayHelloWithRedFontColor() { }}
註解高級套用
使用範圍
Java代碼(jdk)public enum ElementType { // 用於類,接口,枚舉但不能是註解 TYPE, // 欄位上,包括枚舉值 FIELD, // 方法,不包括構造方法 METHOD, // 方法的參數 PARAMETER, // 構造方法 CONSTRUCTOR, // 本地變數或catch語句 LOCAL_VARIABLE, // 註解類型(無數據) ANNOTATION_TYPE, // Java包 PACKAGE}
Java代碼// 限制註解使用範圍@Target({ElementType.METHOD,ElementType.CONSTRUCTOR})public @interface Greeting { // 使用枚舉類型 public enum FontColor { BLUE,RED,GREEN }; String name(); FontColor fontColor() default FontColor.RED;}
註解保持性策略
Java代碼public enum RetentionPolicy { // 此類型會被編譯器丟棄 SOURCE, // 此類型註解會保留在class檔案中,但JVM會忽略它 CLASS, // 此類型註解會保留在class檔案中,JVM會讀取它 RUNTIME}
Java代碼// 讓保持性策略為運行時態,即將註解編碼到class檔案中,讓虛擬機讀取@Retention(RetentionPolicy.RUNTIME)public @interface Greeting { // 使用枚舉類型 public enum FontColor { BLUE,RED,GREEN }; String name(); FontColor fontColor() default FontColor.RED;}
文檔化功能
Java代碼// 讓它定製文檔化功能// 使用此註解時必須設定RetentionPolicy為RUNTIME@Documentedpublic @interface Greeting { // 使用枚舉類型 public enum FontColor { BLUE,RED,GREEN }; String name(); FontColor fontColor() default FontColor.RED;}
標註繼承
Java代碼// 讓它允許繼承,可作用到子類@Inheritedpublic @interface Greeting { // 使用枚舉類型 public enum FontColor { BLUE,RED,GREEN }; String name(); FontColor fontColor() default FontColor.RED;}
讀取方法
Java代碼import java.lang.annotation.Annotation;import java.lang.reflect.Method;//讀取註解信息public class ReadAnnotationInfoTest { public static void main(String[] args) throws Exception { // 測試AnnotationTest類,得到此類的類對象 Class c = Class.forName("com.iwtxokhtd.annotation.AnnotationTest"); // 獲取該類所有聲明的方法 Method[] methods = c.getDeclaredMethods(); // 聲明註解集合 Annotation[] annotations; // 遍歷所有的方法得到各方法上面的註解信息 for (Method method : methods) { // 獲取每個方法上面所聲明的所有註解信息 annotations = method.getDeclaredAnnotations(); // 再遍歷所有的註解,列印其基本信息 System.out.println(method.getName()); for (Annotation an : annotations) { System.out.println("方法名為:" + method.getName() + "其上面的註解為:" + an.annotationType().getSimpleName()); Method[] meths = an.annotationType().getDeclaredMethods(); // 遍歷每個註解的所有變數 for (Method meth : meths) { System.out.println("註解的變數名為:" + meth.getName()); } } } }}