摘要:在中,注解是被當做修飾符如之類來使用的。常用注解修飾重載父類方法修飾未來將被拋棄的類方法屬性等等關閉不當編譯器警告信息。注解來源分類來自的注解如等等三方的注解如中的等等自定義注解通過元注解自定義的注解。是一個標記注解,沒有成員。
簡介
注解,java中提供了一種原程序中的元素關聯(lián)任何信息、任何元素的途徑的途徑和方法。
注解是那些插入到源代碼中使用其他工具可以對其進行處理的標簽。注解不會改變程序的編譯方式。java編譯器會對包含注解與不包含注解的代碼生成相同的虛擬機指令。在java中,注解是被當做修飾符(如public/static之類)來使用的。
注解與注釋注釋是供人看的,注解是供程序調用的。一種是程序員寫給另一個程序員的,一種是程序員寫給計算機解析的。
常用注解@Override : 修飾重載父類方法;
@Deprecated : 修飾未來將被拋棄的類/方法/屬性等等;
@SuppressWarnings: 關閉不當編譯器警告信息。
注解運行機制分類源碼注解: 注解只在源碼中存在,編譯成.class文件中不存在;
編譯時注解: 注解存在于源碼與.class中,運行時不存在;
運行時注解: 在所有階段都存在,可以影響程序運行邏輯。
注解來源分類來自jdk的注解:如@Override /@Deprecated等等;
三方的注解: 如junit中的@Test/@Before等等;
自定義注解: 通過元注解自定義的注解。
元注解給注解進行注解,用于自定義注解。
@Target: 指明定義的注解的作用域,其值包括:
ElementType.CONSTRUCTOR: 構造方法聲明;
ElementType.FIELD: 屬性/字段聲明;
ElementType.LOCAL_VARIABLE: 局部變量聲明;
ElementType.METHOD: 方法聲明;
ElementType.PACKAGE: 包聲明;
ElementType.PARAMETER: 參數(shù)聲明;
ElementType.TYPE: 類接口聲明;
ElementType.ANNOTATION_TYPE: 注解類型聲明;
ElementType.TYPE_PARAMETER: 類型參數(shù)聲明(@since 1.8);
ElementType.TYPE_USE: 類型使用(@since 1.8)
@Retention: 自定義注解的生命周期,其值包括:
RetentionPolicy.SOURCE: 只在源碼顯示,編譯時丟棄;
RetentionPolicy.CLASS: 編譯時記錄到.class中,運行時忽略;
RetentionPolicy.RUNTIME: 運行時存在,可通過反射來讀取。
@Inherited: 一個標記注解,闡述了某個被標注的類型是被繼承的,只能繼承與類。
@Documented: 用于描述其它類型的annotation應該被作為被標注的程序成員的公共API,因此可以被例如javadoc此類的工具文檔化。Documented是一個標記注解,沒有成員。
自定義注解//@Target(ElementType.METHOD) @Target({ElementType.METHOD,ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface Description { String desc() default ""; String author() default ""; int age() default 18; }
使用關鍵字@interface定義注解;
成員變量以無參無異常的方式聲明;
可以通過default關鍵字給成員變量指定默認值;
成員變量的類型是受限制的,包括原始類型、String、Class、Annotation、Enumeration;
如果注解只有一個成員變量,則成員名稱必須取名value(),在使用中可以忽略成員名稱與賦值號(=);
注解可以沒有成員,沒有成員的注解稱為標示注解。
使用注解// @<注解名稱>(<成員名1>=<成員值1>,<成員名2>=<成員值2> ...) @Description(desc = "I"m class annotation") public class AnnotationApp { @Description(desc = "I"m method annotation",author = "rudy") public String eyeColor(){ return "red"; } }解析注解
通過反射獲取類、方法、成員上的運行時注解信息,從而實現(xiàn)動態(tài)控制程序運行的邏輯。
import Annotation.Description; import org.junit.Test; public class AnnotationTest { @Test public void testParse() throws ClassNotFoundException { // 取出注解 Class cls = Class.forName("Annotation.AnnotationApp"); boolean isExit = cls.isAnnotationPresent(Description.class); if(isExit){ // 做邏輯處理 Description annotation = (Description) cls.getAnnotation(Description.class); System.out.println("get annotation:" + annotation.desc()); }else{ System.out.println("no annotation!"); } } }
使用類加載器加載類,獲取類對象;
判斷是否存在類注解;
取出類注解,做邏輯處理;
方法注解類似。
他山之石深入理解Java:注解(Annotation)--注解處理器: http://blog.csdn.net/z69183787/article/details/40378309
全面解析Java注解(視頻):http://www.imooc.com/learn/456
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/69846.html
摘要:例子首先來看一個例子這里用了目的是告訴編譯器這個方法重寫了父類的方法如果編譯器發(fā)現(xiàn)父類中沒有這個方法就會報錯這個注解的作用大抵是防止手滑寫錯方法同時增強了程序的可讀性這里需要指出一點去掉并不會影響程序的執(zhí)行只是起到標記的作用找到的實現(xiàn)關注點 1. 例子 首先來看一個例子: @Override public String toString() { return xxxxx; ...
摘要:前言注解就是提供了一種元程序中的元素關聯(lián)任何信息和著任何元數(shù)據(jù)的途徑和方法。注解是一個接口,程序可以通過反射來獲取指定程序元素的對象,然后通過對象來獲取注解里面的元數(shù)據(jù)。注解是及以后版本引入的。綜上所述元數(shù)據(jù)以標簽的形式存在于代碼中。 前言 Annotation(注解)就是Java提供了一種元程序中的元素關聯(lián)任何信息和著任何元數(shù)據(jù)(metadata)的途徑和方法。Annotion(注解...
摘要:注解提供了一種安全的類似注釋的機制,用來將任何的信息或元數(shù)據(jù)與程序元素類方法成員變量等進行關聯(lián)。為程序的元素類方法成員變量加上更直觀更明了的說明,這些說明與程序的業(yè)務邏輯無關,并且提供給指定的工具或框架使用。 什么是注解? Annotation 是 Java5 之后開始引入的新特性,中文為注解。注解提供了一種安全的類似注釋的機制,用來將任何的信息或元數(shù)據(jù)(metadata)與程序元素(...
摘要:的在日常開發(fā),特別是開發(fā)中使用廣泛,各種框架,測試框架多多少少都會引入一些注解。的功能是作用于程序元數(shù)據(jù)的特殊類型。而在編譯期使用注解則需要特殊的工具,本文不討論??梢钥吹酵ㄟ^類中的反射方法獲取到了這個類的注解以及其方法的注解。 Java的Annotation在日常開發(fā),特別是java web開發(fā)中使用廣泛,各種web框架,測試框架多多少少都會引入一些注解。若對java注解有一個全面深...
摘要:另一個很重要的因素是定義了一種標準的描述元數(shù)據(jù)的方式。對于注解,它的用戶就是虛擬機,工作在字節(jié)碼層面,在編譯階段進行檢查,其處理機制主要是內部處理。 什么是注解 用一個詞就可以描述注解,那就是元數(shù)據(jù),即一種描述數(shù)據(jù)的數(shù)據(jù)。所以,可以說注解就是源代碼的元數(shù)據(jù)。比如,下面這段代碼: @Override public String toString() { return This is St...
閱讀 3332·2021-11-25 09:43
閱讀 1314·2021-11-23 09:51
閱讀 3618·2021-10-11 11:06
閱讀 3734·2021-08-31 09:41
閱讀 3609·2019-08-30 15:53
閱讀 3519·2019-08-30 15:53
閱讀 977·2019-08-30 15:43
閱讀 3321·2019-08-29 14:02