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