JDK1.5引入了註解。 按來源分類:
內建註解
第三方註解
自訂註解
內建註解:例如Override,Deprecated,Suppvisewarnnings。
Override是來標識重寫的,如果沒有重寫,就會報錯。
Deprecated是用來標識過時的方法,如果使用的話會有風險提示,並劃橫線,使用Suppvisewarnnings就可確認使用,消除風險提示。
第三方註解:例如Spring當中的Autowired,Service,Resource,Repository.Mybatis當中的InsertProvider,Updateprovider,Options等等。
自訂註解:public @interface [註解名]. 按運行機制分類:
源碼註解
編譯時間註解
運行時註解
源碼註解:在源碼的時候存在,編譯成class檔案則消失
編譯時間註解:源碼存在,編譯成class檔案也存在
運行時註解:要對程式運行有作用,例如Autowired註解就可以自動裝配執行個體。 自訂註解執行個體:
/**@author:micro_hz2015年8月21日 *///Target目標,定義註解起作用的範圍,這裡定義了Method和類上的作用@Target({ElementType.METHOD,ElementType.TYPE})//註解可以繼承@Inherited//註解註解的運行機制@Retention(RetentionPolicy.RUNTIME)//註解產生文檔時候保留註解@Documentedpublic @interface Description { //如果只有一個註解,必須是value,這個時候使用註解的的時候不用寫參數value名和"=",直接寫內容Description("") String value();}
我們在普通的類中使用該自訂註解
package annotation.test;/**@author:micro_hz2015年8月21日 *///在類上使用了我們自訂的註解@Description("this is a class Annotation")public class AnnotationTest { //在方法上使用我們自訂的註解 @Description("this is a method Annotation") @Deprecated//使用該註解表示該方法已經過時 public void deprecatedMethod() { System.out.println("i am a Deprecated Annotation method"); } public void p() { System.out.println("this is a AnnotationTest class"); }}
import java.lang.annotation.Annotation;import java.lang.reflect.Method;/**@author:micro_hz2015年8月21日 */public class Test { @SuppressWarnings("deprecation") public static void main(String args[]) { //若使用Deprecated註解的方法,會警告,添加SuppressWarnnings即可確認使用,消除風險 AnnotationTest annotationTest = new AnnotationTest(); annotationTest.deprecatedMethod(); try { //獲得類上的註解內容 //使用類載入得到這個類 Class<?> c = Class.forName("annotation.test.AnnotationTest"); //判斷這個類是否存在Description這個註解 if(c.isAnnotationPresent(Description.class)) { //若存在即列印出來這個類的value註解值 Description d = (Description) c.getAnnotation(Description.class); System.out.println(d.value()); } //獲得方法上的註解內容 /* * 方法1 */ //獲得所有的方法 Method[] methods = c.getMethods(); //遍曆所有的方法 for(Method m : methods) { //獲得每個方法的所有註解 Annotation[] as = m.getAnnotations(); //遍曆每個註解 for(Annotation a : as) { //如果註解為Description類型,列印出value if(a instanceof Description) { System.out.println(((Description) a).value()); } } } /* * 方法2 */ for(Method m : methods) { //判斷方法是否有該註解,有就列印出該註解的value if(m.isAnnotationPresent(Description.class)) { System.out.println(((Description)m.getAnnotation(Description.class)).value()); } } } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
運行結果:
i am a Deprecated Annotation methodthis is a class Annotationthis is a method Annotationthis is a method Annotation
工程目錄
慕課網註解教程
元註解範圍:
繼承是繼承類上的註解,不繼承方法上的註解。