【深入JAVA】java注解
在閱讀的過程中有不論什么問題,歡迎一起交流
郵箱:1494713801@qq.com???
QQ:1494713801
?
?
1、什么是java注解
? ? 注解,顧名思義,注解,就是對某一事物進行加入凝視說明,會存放一些信息。這些信息可能對以后某個時段來說是非常實用處的。 java提供了一套注解機制,使得我們能夠對方法、類、參數、包、域以及變量等加入標準(即附上某些信息)。且在以后某個時段通過反射將標注的信息提取出來以供使用。
2、JDK提供的基本注解?
a. @SuppressWarnings 該注解的作用是阻止編譯器發出某些警告信息。它能夠有下面參數:
? ? deprecation:過時的類或方法警告。
? ? unchecked:運行了未檢查的轉換時警告。
? ? fallthrough:當Switch程序塊直接通往下一種情況而沒有Break時的警告。
? ? path:在類路徑、源文件路徑等中有不存在的路徑時的警告。
? ? serial:當在可序列化的類上缺少serialVersionUID定義時的警告。
? ? finally:不論什么finally子句不能完畢時的警告。
? ? all:關于以上全部情況的警告。
b.@Deprecated 該注解的作用是標記某個過時的類或方法。
c. @Override 該注解用在方法前面,用來標識該方法是重寫父類的某個方法。
?
3、元注解?
a. @Retention 它是被定義在一個注解類的前面,用來說明該注解的生命周期。它有下面參數:
? ? RetentionPolicy.SOURCE:指定注解僅僅保留在一個源文件其中。
? ? RetentionPolicy.CLASS:指定注解僅僅保留在一個class文件里。
? ? RetentionPolicy.RUNTIME:指定注解能夠保留在程序執行期間。
b. @Target 它是被定義在一個注解類的前面,用來說明該注解能夠被聲明在哪些元素前。
它有下面參數:
? ? ElementType.TYPE:說明該注解僅僅能被聲明在一個類前。
? ? ElementType.FIELD:說明該注解僅僅能被聲明在一個類的字段前。
? ? ElementType.METHOD:說明該注解僅僅能被聲明在一個類的方法前。
? ? ElementType.PARAMETER:說明該注解僅僅能被聲明在一個方法參數。
? ? ElementType.CONSTRUCTOR:說明該注解僅僅能聲明在一個類的構造方法前。
? ? ElementType.LOCAL_VARIABLE:說明該注解僅僅能聲明在一個局部變量前。
? ? ElementType.ANNOTATION_TYPE:說明該注解僅僅能聲明在一個注解類型前。
? ? ElementType.PACKAGE:說明該注解僅僅能聲明在一個包名前。
?
4、注解的生命周期
一個注解能夠有三個生命周期,它默認的生命周期是保留在一個CLASS文件,但它也能夠由一個@Retetion的元注解指定它的生命周期。
? ? a.java源文件 當在一個注解類前定義了一個@Retetion(RetentionPolicy.SOURCE)的注解,那么說明該注解僅僅保留在一個源文件其中。當編譯器將源文件編譯成class文件時,它不會將源文件里定義的注解保留在class文件里。
? ? b. class文件里 當在一個注解類前定義了一個@Retetion(RetentionPolicy.CLASS)的注解。那么說明該注解僅僅保留在一個class文件其中,當載入class文件到內存時,虛擬機會將注解去掉,從而在程序中不能訪問。
? ? c. 程序執行期間 當在一個注解類前定義了一個@Retetion(RetentionPolicy.RUNTIME)的注解,那么說明該注解在程序執行期間都會存在內存其中。此時,我們能夠通過反射來獲得定義在某個類上的全部注解。?
5、注解的定義?
一個簡單的注解:?public @interface Annotation01{
? ? ? ? //定義公共的final靜態屬性.....
? ? ? ? //定以公共的抽象方法......
?}
? a.注解能夠有哪些成員 注解和接口相似。它僅僅能定義final靜態屬性和公共抽象方法。
? b.注解的方法 ?
? ? ? 1.方法前默認會加上public abstract
? ? ? 2.在聲明方法時能夠定義方法的默認返回值。 比如: Stringcolor()default"blue"; String[]color()default{"blue","red",......}
? ? ? 3.方法的返回值能夠有哪些類型 8種基本類型,String、Class、枚舉、注解及這些類型的數組。
? c.使用注解(參照以下的注解使用)注解的使用分為三個過程。
定義注解-->聲明注解-->得到注解
? ? ? a.定義注解(參照上面的注解定義)
? ? ? b.聲明注解
? ? ? ? ? 1.在哪些元素上聲明注解 假設定義注解時沒有指定@Target元注解來限制它的使用范圍。那么該注解能夠使用在ElementType枚舉指定的不論什么一個元素前。
否則。僅僅能聲明在@Target元注解指定的元素前。 一般形式: @注解名()
? ? ? ? ? 2.對注解的方法的返回值進行賦值 對于注解中定義的每個沒有默認返回值的方法。在聲明注解時必須對它的每個方法的返回值進行賦值。
一般形式: @注解名(方法名=方法返回值。、、、、、、) 假設方法返回的是一個數組時。那么將方法返回值寫在{}符號里 @注解名(方法名={返回值1,返回值2,、、、、、、},、、、、、、、)
? ? ? ? ? 3.對于僅僅含有value方法的注解,在聲明注解時能夠僅僅寫返回值。
? ? ? c.得到注解 對于生命周期為執行期間的注解。都能夠通過反射獲得該元素上的注解實例。
? ? ? ? ? 1、聲明在一個類中的注解 能夠通過該類Class對象的getAnnotation或getAnnotations方法獲得。
? ? ? ? ? 2、聲明在一個字段中的注解 通過Field對象的getAnnotation或getAnnotations方法獲得
? ? ? ? ? 3、聲明在一個方法中的注解 通過Method對象的getAnnotation或getAnnotations方法獲得?
6、樣例
以下講的設計一個最簡單的Annotation樣例,這一樣例共用四個文件;
?? 1、Description.java
?? 說明:全部的Annotation會自己主動繼承java.lang.annotation這一個接口,所以不能再去繼承別的類或是接口.
?? 最重要的一點,Annotation類型里面的參數該怎么設定:
?? 第一,僅僅能用public或默認(default)這兩個訪問權修飾.比如,String value();這里把方法設為defaul默認類型.
?? 第二,參數成員僅僅能用基本類型byte,short,char,int,long,float,double,boolean八種基本數據類型和String,Enum,Class,annotations等數據類型,以及這一些類型的數組.比如,String value();這里的參數成員就為String.
?? 第三,假設僅僅有一個參數成員,最好把參數名稱設為"value",后加小括號.例:上面的樣例就僅僅有一個參數成員.
?? 2、Name.java
?? 3、JavaEyer.java
Java代碼?? 4、最后,寫一個能夠執行提取JavaEyer信息的類TestAnnotation
Java代碼??? 5、執行結果:
???? 描寫敘述:javaeye,做最優秀的軟件開發交流社區
???? -----------------
??? 創始人:robbin
??? 創建的社區:javaEye
??? 創始人:江南白衣
? ? 創建的社區:springside?
總結
以上是生活随笔為你收集整理的【深入JAVA】java注解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构基础:栈(Stack)
- 下一篇: R 语言 相关入门资料