一篇文章帶你入門java注解
注解
什么是注解
- Annotation是從JDK5.0開始引入的新技術(shù)
- Annotation的作用:
- 1.不是程序本身,可以對程序做出解釋(這一點(diǎn)和注釋(comment)沒什么區(qū)別)
- 2.可以被其他程序(比如:編譯器等)讀取
Annotation的格式:
注解是以"@注釋名"在代碼中存在的,還可以添加一些參數(shù)值,例如:
@SuppressWarnings(value=“unchecked”)
Annotation在哪里使用
可以附加到package,class,method,field等上面,相當(dāng)于給他們添加了額外的輔助信息,我們可以通過反射機(jī)制編程實(shí)現(xiàn)對這些元數(shù)據(jù)的訪問
內(nèi)置注解
@Override:定義在Java.lang.Override中,此注釋只適用于修飾方法,表示一個(gè)方法聲明打算重寫超類中的另一個(gè)方法聲明
public class Test extends Object{ //@Override 重寫注解,必須是重寫超類的方法,不然會(huì)發(fā)生編譯器上的錯(cuò)誤 @Override public String toString() { return super.toString(); } }
@Deprecated:定義在Java.lang.Deprecated中,此注釋可以用于修飾方法,屬性,類,表示不鼓勵(lì)程序員使用這樣的元素,通常是因?yàn)樗芪kU(xiǎn)或者存在更好的選擇
@Deprecated //意思為方法已經(jīng)過時(shí),存在危險(xiǎn),或者有更好的方法 public static void test01(){ System.out.println("過時(shí)的"); } public static void main(String[] args) { test01(); }
雖然是過時(shí)或存在危險(xiǎn),但是依然可以調(diào)用此方法,
根據(jù)上面的圖片也會(huì)看到,如果被@Deprecated注釋上的方法,在調(diào)用的時(shí)候,會(huì)畫一點(diǎn)橫線
@suppressWarnings:定義在java.lang.SuppressWarnings中,用來抑制編譯時(shí)的警告信息,
與前兩個(gè)注釋有所不同,你需要添加一個(gè)參數(shù)才能正常使用,這些參數(shù)都是已經(jīng)定義好了的,我們選擇性的使 用就好了
√@SuppressWarnings(“all”)
√@SuppressWarnings(“unchecked”)
√@SuppressWarnings(value={“unchecked”,“deprecation”})
√等等
元注解
元注解的作用就是負(fù)責(zé)注解其他注解,Java定義了4個(gè)標(biāo)準(zhǔn)的meta-annotation類型,他們被用來提供對其他annotation類型作說明
這些類型和它們所支持的類在Java.lang.annotation包中可以找到(@Target,@Retention,@Documented,@Inherited)
@Target:用于描述注解的使用范圍(即:被描述的注解可以用在什么地方)
@Retention:表示需要在什么級別保存該注釋信息,用于描述注解的生命周期
(SOURCE<CLASS<RUNTIME)
@Document:說明該注解將被包含在Javadoc中
@Inherited:說明子類可以繼承父類中的該注解
//測試元注解 @MyAnnotation public class Test02 { } //定義一個(gè)注解 //Target 表示我們的注解可以用到哪些地方 @Target(value = {ElementType.METHOD,ElementType.TYPE}) //METHOD注解可以在方法TYPE可以在類 //Retention 表示我們的注解在什么地方還有效 //runtime>class>sources @Retention(value = RetentionPolicy.RUNTIME) //Documented 表示是否將我們的注解生成在Javadoc中 @Documented //子類可以繼承父類的注解 @Inherited @interface MyAnnotation{ }
自定義注解
使用**@interface**自定義注解時(shí),自動(dòng)繼承了java.lang.annotation.Annotation接口
分析:
@interface用來聲明一個(gè)注解,格式:public @interface 注解名{ 定義內(nèi)容 }
其中的每一個(gè)方法實(shí)際上是聲明了一個(gè)配置參數(shù)
方法的名稱就是參數(shù)的名稱
返回值類型就是參數(shù)的類型(返回值只能是基本類型,Class,String,enum)
可以通過default來聲明參數(shù)的默認(rèn)值
如果只有一個(gè)參數(shù)成員,一般參數(shù)名為value
注解元素必須要有值,我們定義注解元素時(shí),經(jīng)常使用空字符串,0作為默認(rèn)值
實(shí)例
public class Test03 { //注解可以顯示賦值,如果沒有默認(rèn)值,我們就必須給注解賦值 @MyAnntotation2(schools = {"河北軟件","寬城職教"}) public void Test(){} @MyAnntotation3("ccl") //可以省略value public void Test1(){} } //多次參數(shù)的注解 @Target({ElementType.TYPE,ElementType.METHOD}) //可以用到哪里 @Retention(RetentionPolicy.RUNTIME) // 表示在什么地方有效 @interface MyAnntotation2{ //注解的參數(shù):參數(shù)類型+參數(shù)名(); String name() default ""; int age() default 0; int id() default -1; //如果默認(rèn)值為-1,代表不存在 String[] schools(); } //一個(gè)參數(shù)的注解 @Target({ElementType.TYPE,ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @interface MyAnntotation3{ String value() ; }
如果注解的參數(shù)只要有一個(gè)的時(shí)候,可以將參數(shù)名設(shè)為value,這樣在寫注解的時(shí)候,括號(hào)里可以省略value參數(shù)名,而別的參數(shù)名需要寫上
@interface MyAnntotation3{ String value() ; }
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
java讀取某個(gè)文件夾下的所有文件實(shí)例代碼
這篇文章主要介紹了java讀取某個(gè)文件夾下的所有文件實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-03-03Java語言實(shí)現(xiàn)簡單FTP軟件 FTP連接管理模塊實(shí)現(xiàn)(8)
這篇文章主要為大家詳細(xì)介紹了Java語言實(shí)現(xiàn)簡單FTP軟件,F(xiàn)TP連接管理模塊的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04Java Synchronized字節(jié)碼層分析體驗(yàn)
這篇文章主要介紹了Java Synchronized字節(jié)碼層分析,synchronized關(guān)鍵字解決了多個(gè)線程之間的資源同步性,synchronized關(guān)鍵字保證了它修飾的方法或者代碼塊任意時(shí)刻只有一個(gè)線程在訪問2023-04-04Spring FreeMarker整合Struts2過程詳解
這篇文章主要介紹了Spring FreeMarker整合Struts2過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10