Java中使用注解的實例詳解
注解(Annotation)是放在Java源碼的類、方法、字段、參數(shù)前的一種特殊“注釋”
注釋會被編譯器直接忽略,注解則可以被編譯器打包進(jìn)入class文件,因此,注解是一種用作標(biāo)注的“元數(shù)據(jù)”。
注解的作用
注解可以分為三類:
1、內(nèi)置注解(由編譯器使用的注解),如:
@Override:讓編譯器檢查該方法是否正確地實現(xiàn)了覆寫;@SuppressWarnings:告訴編譯器忽略此處代碼產(chǎn)生的警告。
這類注解不會被編譯進(jìn)入.class文件,它們在編譯后就被編譯器扔掉了。
2、由工具處理.class文件使用的注解,比如有些工具會在加載class的時候,對class做動態(tài)修改,實現(xiàn)一些特殊的功能。這類注解會被編譯進(jìn)入.class文件,但加載結(jié)束后并不會存在于內(nèi)存中。這類注解只被一些底層庫使用,一般我們不必自己處理。
3、在程序運行期能夠讀取的注解,它們在加載后一直存在于JVM中,這也是最常用的注解。例如,一個配置了@PostConstruct的方法會在調(diào)用構(gòu)造方法后自動被調(diào)用(這是Java代碼讀取該注解實現(xiàn)的功能,JVM并不會識別該注解)。
注解的定義
元注解
有一些注解可以修飾其他注解,這些注解就稱為元注解(meta annotation)。Java標(biāo)準(zhǔn)庫已經(jīng)定義了一些元注解,我們只需要使用元注解,通常不需要自己去編寫元注解。
@Target
定義注解能夠被應(yīng)用于源碼的哪些位置
// 定義注解 @Report 可用在方法上
@Target(ElementType.METHOD)
public @interface MyAnnotation1 {
int type() default 0;
String level() default "info";
String value() default "";
}
// 定義注解 @Report 可用在方法或字段上
@Target({
ElementType.METHOD,
ElementType.FIELD
})
public @interface MyAnnotation2 {
...
}@Retention
定義注解的生命周期,默認(rèn)為 CLASS,使用最多一般是 RUNTIME
- 僅編譯期:
RetentionPolicy.SOURCE - 僅class文件:
RetentionPolicy.CLASS - 運行期:
RetentionPolicy.RUNTIME
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
int type() default 0;
String level() default "info";
String value() default "";
}@Repeatable
定義注解是否可重復(fù)
@Repeatable(Reports.class)
@Target(ElementType.TYPE)
public @interface MyAnnotation {
int type() default 0;
String level() default "info";
String value() default "";
}@Inherited
定義子類是否可繼承父類定義的注解
@Inherited
@Target(ElementType.TYPE)
public @interface MyAnnotation {
int type() default 0;
String level() default "info";
String value() default "";
}定義注解
public @interface xxx {...}- 用
@interface定義注解 - 添加參數(shù)、默認(rèn)值
- 用元注解配置注解
// 用元注解配置注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
// 用 @interface 定義注解
public @interface MyAnnotation {
// 注解的參數(shù)
int type() default 0;
String level() default "info";
String value() default "";
}- 定義一個注解時,還可以定義配置參數(shù)。配置參數(shù)可以包括:基本類型、String、Class、枚舉類型。
- 可以使用 default 來聲明參數(shù)的默認(rèn)值
- 最常用的參數(shù)定義為
value(),推薦所有參數(shù)都盡量設(shè)置默認(rèn)值 - 必須設(shè)置
@Target和@Retention,@Retention一般設(shè)置為RUNTIME,便于運行期讀取該注解
到此這篇關(guān)于Java中如何使用注解的文章就介紹到這了,更多相關(guān)java注解使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java壓縮解壓zip技術(shù)_動力節(jié)點Java學(xué)院整理
Java解壓縮zip - 多個文件(包括文件夾),對多個文件和文件夾進(jìn)行壓縮,對復(fù)雜的文件目錄進(jìn)行解壓。壓縮方法使用的是可變參數(shù),可以壓縮1到多個文件2017-05-05
MyBatis-Plus?updateById更新不了空字符串或null的解決方法
本文主要介紹了MyBatis-Plus?updateById更新不了空字符串或null的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
IDEA項目maven?project沒有出現(xiàn)plugins和Dependencies問題
這篇文章主要介紹了IDEA項目maven?project沒有出現(xiàn)plugins和Dependencies問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12
Java常用鎖synchronized和ReentrantLock的區(qū)別
這篇文章主要介紹了Java常用鎖synchronized和ReentrantLock的區(qū)別,二者的功效都是相同的,但又有很多不同點,下面我們就進(jìn)入文章了解具體的相關(guān)內(nèi)容吧。需要的小伙伴也可以參考一下2022-05-05

