輕松掌握J(rèn)ava注解,讓編程更智能、更優(yōu)雅
一、什么是注解
定義:注解(Annotation),也叫元數(shù)據(jù)。一種代碼級別的說明。
它是JDK1.5及以后版本引入的一個特性,與類、接口、枚舉是在同一個層次。
它可以聲明在包、類、字段、方法、局部變量、方法參數(shù)等的前面,用來對這些元素進(jìn)行說明,注釋。
二、內(nèi)置注解
- @Override: 標(biāo)記在成員方法上,用于標(biāo)識當(dāng)前方法是重寫父類(父接口)方法,編譯器在對該方法進(jìn)行編譯時會檢查是否符合重寫規(guī)則,如果不符合,編譯報錯。
- @Deprecated: 用于標(biāo)記當(dāng)前類、成員變量、成員方法或者構(gòu)造方法過時如果開發(fā)者調(diào)用了被標(biāo)記為過時的方法,編譯器在編譯期進(jìn)行警告。
- @SuppressWarnings: 壓制警告注解,可放置在類和方法上,該注解的作用是阻止編譯器發(fā)出某些警告信息。
三、元注解
元注解即注解的注解。
在jdk的中java.lang.annotation包中定義了四個元注解。
@Target
指定被修飾的注解的作用范圍,如果不寫默認(rèn)是任何地方都可以使用。
可選的參數(shù)值在枚舉類ElemenetType中包括:
TYPE: 用在類,接口上 FIELD:用在成員變量上 METHOD: 用在方法上 PARAMETER:用在參數(shù)上 CONSTRUCTOR:用在構(gòu)造方法上 LOCAL_VARIABLE:用在局部變量上
@Retention
指定了被修飾的注解的生命周期。
可選的參數(shù)值在枚舉類型RetentionPolicy中包括:
SOURCE:注解只存在于Java源代碼中,編譯生成的字節(jié)碼文件中就不存在了。 CLASS:注解存在于Java源代碼、編譯以后的字節(jié)碼文件中,運(yùn)行的時候內(nèi)存中沒有,默認(rèn)值。 RUNTIME:注解存在于Java源代碼中、編譯以后的字節(jié)碼文件中、運(yùn)行時內(nèi)存中,程序可以通過反射獲取該注解。
正常開發(fā)中我們自定義注解的時候無腦用 Runtime 就可以了。
@Documented
指定了被修飾的注解是可以Javadoc等工具文檔化。
@Inherited
指定了被修飾的注解修飾程序元素的時候是可以被子類繼承的。
四、自定義注解
定義格式
元注解 public @interface 注解名稱{ 屬性列表; }
注解的屬性
- 格式1:數(shù)據(jù)類型 屬性名();
- 格式2:數(shù)據(jù)類型 屬性名() default 默認(rèn)值;
示例如下:
public @interface Student { String name(); int age() default 18; String gender() default "男"; }
注意:沒有默認(rèn)值的屬性是必填的,當(dāng)屬性只有一個,且屬性名為 value 時,可以省略。
示例:
public class Test { @Student("zhangsan") public void test(){ } } public @interface Student { String value(); }
反射解析注解
反射請移步:Java反射,看完就會用
如果反射懂了,注解懂了,那就不需要過多解釋直接看示例就行了。
自定義注解 Book
@Target({ElementType.METHOD,ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface Book { // 書名 String value(); // 價格 double price() default 100; // 作者 String[] authors(); }
BookStore類
@Book(value = "紅樓夢",authors = "曹雪芹",price = 998) public class BookStore { }
TestAnnotation類
public class TestAnnotation { public static void main(String[] args) throws Exception{ System.out.println("---------獲取類上注解的數(shù)據(jù)----------"); test(); } /** * 獲取BookStore類上使用的Book注解數(shù)據(jù) */ public static void test(){ // 獲得BookStore類對應(yīng)的Class對象 Class c = BookStore.class; // 判斷BookStore類是否使用了Book注解 if(c.isAnnotationPresent(Book.class)) { // 根據(jù)注解Class對象獲取注解對象 Book book = (Book) c.getAnnotation(Book.class); // 輸出book注解屬性值 System.out.println("書名:" + book.value()); System.out.println("價格:" + book.price()); System.out.println("作者:" + Arrays.toString(book.authors())); } } }
到此這篇關(guān)于輕松掌握J(rèn)ava注解,讓編程更智能、更優(yōu)雅的文章就介紹到這了,更多相關(guān)Java注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot反爬蟲組件kk-anti-reptile的使用方法
這篇文章主要介紹了springboot反爬蟲組件kk-anti-reptile的使用方法,幫助大家更好的利用spring boot反爬蟲,保護(hù)網(wǎng)站安全,感興趣的朋友可以了解下2021-01-01Java連接MySQL8.0 JDBC的詳細(xì)步驟(IDEA版本)
這篇文章主要介紹了Java連接MySQL8.0 JDBC的詳細(xì)步驟(IDEA版本),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04解決springboot自定義注解AOP在controller上導(dǎo)致controller注入失敗問題
這篇文章主要介紹了解決springboot自定義注解AOP在controller上導(dǎo)致controller注入失敗問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10Java中l(wèi)ambda表達(dá)式實現(xiàn)aop切面功能
本文主要介紹了Java中l(wèi)ambda表達(dá)式實現(xiàn)aop切面功能,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02Springboot中基于X509完成SSL檢驗的原理與實現(xiàn)
本文詳細(xì)解析了HTTPS通信中SSL證書的作用和原理,SSL證書建立在客戶端和服務(wù)器之間的安全通道,確保數(shù)據(jù)傳輸?shù)耐暾院捅C苄?詳細(xì)的介紹了Springboot中基于X509完成SSL檢驗的原理與實現(xiàn),感興趣的可以了解一下2024-09-09Java實現(xiàn)線程安全單例模式的五種方式的示例代碼
這篇文章主要介紹了Java中實現(xiàn)線程安全單例模式的五種方式:餓漢式、枚舉單例、懶漢式、DCL懶漢式和靜態(tài)內(nèi)部類懶漢單例,感興趣的可以了解一下2022-03-03基于Retrofit+Rxjava實現(xiàn)帶進(jìn)度顯示的下載文件
這篇文章主要為大家詳細(xì)介紹了基于Retrofit+Rxjava實現(xiàn)帶進(jìn)度顯示的下載文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05