Java注解
Java注解
好嘛,好嘛,又到了傷腦筋的時候啦!
講真的,之前Java這三大高級特性,我一聽名字就感覺到了一股殺氣!哇,泛型,反射,注解,這都是什么高級詞匯,一聽就很難學! 后來學了后發現,嗯,沒感覺錯,確實是很難學!哈哈哈(笑啥笑,難學還挺開心)
今天我們的主角是注解。好家伙,注解。啥東西啊,看著就沒思路。 不要慌,問題不大
我們先看看比較官方的解釋:Java 注解用于為 Java 代碼提供元數據。作為元數據,注解不直接影響你的代碼執行,但也有一些類型的注解實際上可以用于這一目的。
看看官方解釋,再結合字面意思,咦,貌似有點內個意思了哈。
上面清晰的寫著,注解不直接影響你的代碼執行,意味著什么,意味著我們從字面理解的意思,是差不多對的。 好,總結一下,注解就是:聲明我們的代碼中的方法,屬性,類,接口等作用的,而且和注釋不同的一個東西。
而且而且,貌似你可以這么理解,我給你一個注解,像不像我給你扣了一個大帽子。
比如說你初學Java,進了一個Java群,你剛好會了一個新知識,這時候有一個比較活躍的群友問了這個問題,你洋洋灑灑的說了出來,頓時這個人就給你套了個大佬的帽子,因為他是活躍群友,所有你一冒頭他就喊你是大佬,這樣你在別人眼里也就是大佬了。
而注解就相當于是我給代碼套了個帽子,讓別的程序員一下就能看出來他是干嘛的 。
1.常規注解
1.代碼中的注解
Java代碼中的注解就是這種形式的
在代碼上面有個 : @Xxxx 的東西
應該見過,也可能沒見過,不過就是這個東西,這是用法
2.創造注解
那么怎么創造一個注解呢
其實特別簡單,格式如下:
?
@Interface Xxx{}
?
沒了,就這么簡單
那么我們就動動小手 創建一個我們能的注解吧
//定義一個 什么都沒有的 注解 @interface Isthis{ }
這就定義好我們自己的注解了
3.使用注解
上面我們已經定義了一個注解,那么怎么使用呢
只需要將我們自己定義的注解(名詞)放在我們需要注解(動詞)的代碼上面,就像這樣
//定義一個 什么都沒有的 注解 @interface Isthis{ } //使用你的注解 @Isthis class Good{ }
我們定義了一個空的注解,也定義了一個空的類,并將我們的注解用在了我們的類上面
當然,這樣很不直觀,那么我們就實例化一個對象來看看
public class Ex5_8 { public static void main(String[] args) { Good a = new Good(); System.out.println(a); } }
運行結果為:
在這里插入圖片描述
然后再將注解去掉看看
public class Ex5_8 { public static void main(String[] args) { Good a = new Good(); System.out.println(a); } } class Good{ }
運行結果為:
在這里插入圖片描述
是一樣的,說明注釋對我們的代碼沒有影響
2.元注解
什么是元注解?能給注解進行注解的注解。
哈哈哈,是不是有點套。沒事,這樣看:
元注解是能給注解(我們之前定義的)進行注解(注釋解釋)的注解(名詞,注解)。
這就很清晰了吧。
我們的元注解有以下幾種,下面我將帶領大家看看。
在這里插入圖片描述
1. @Retention
Retention的意思是保留。根據見名知意的理解,其實這個元注解的作用其實就是注解的保留時間,也就是這個注解能保留到什么時候。
注解也有方法,我們來看看這個保留注解的方法
SOURCE
被這個屬性注解的注解,只在源代碼中能看到,起作用
用法是這樣:
@Retention(RetentionPolicy.SOURCE) @Interface Text{}
CLASS
被這個屬性注解的注解,在class文件中也可以看見,但是不會被我們的Java虛擬機加載
用法:
@Retention(RetentionPolicy.CLASS) @interface Text{ }
RUNTIME
會被Java虛擬機加載
@Retention(RetentionPolicy.RUNTIME) @interface Text{ }
2. @Documented
中文意思是:備有證明文件的。好吧,這個意思就不是那么清晰了
這個元注解的作用是將我們的注解加載到javadoc中,這個javadoc是我們的Java程序中所有的文檔注釋(/** */)產生的注視文檔。
而這個元注解就是可以讓我們的注解也進入這個文檔。
3. @Target
中文意思是:目標。
作用是:告訴注解,你該用到哪里,就是說被這個注解的注解可以注解什么類型的數據
大白話:我告訴你,你只能給類進行注解,那你就只能給類注解,放別的地方就會報錯。
具體使用如下:
可以給注解進行注解,是不是想到了元注解,沒錯,可以看看元注解的源碼,都被這個注解過
@Target(ElementType.ANNOTATION_TYPE) @interface Text{ }
可以讓注解給構造方法注解
@Target(ElementType.CONSTRUCTOR) @interface Text{ }
可以讓注解給屬性進行注解
@Target(ElementType.FIELD) @interface Text{ }
可以讓注解給局部變量進行注解
@Target(ElementType.LOCAL_VARIABLE) @interface Text{ }
可以讓注解給方法進行注解
@Target(ElementType.METHOD) @interface Text{ }
可以讓注解給包進行注解
@Target(ElementType.PACKAGE) @interface Text{ }
可以讓注解給方法變量進行注解
@Target(ElementType.PARAMETER) @interface Text{ }
4. @Inherited
中文意思:繼承
被此元注解 注解(動詞) 的注解(名詞),如果注解了一個類A,類A被類B繼承,那么,類B同樣繼承類A的注解。
@Inherited @interface Text{ } @Text class Good{ } class Good_son extends Good{}
這里的Good_son類雖然看起來沒有被注解,但是因為Inherited元注解的存在,他也繼承了Good的注解@Text.
3.標準注解
標準注解就是直接作用在別的數據上的 什么是數據?變量,方法,類,接口,枚舉。。。
1. @Override
中文意思:重寫
保證Override重寫聲明的正確性。
是不是很眼熟,沒錯就是了類里面的重寫父類方法,這個注解的作用就是用在子類需要重寫的時候。
如果父類沒有你要重寫的方法,就會出錯誤。這里我們故意出錯看看錯誤
class Good{ void say(){} void speak(){} } class Good_son extends Good{ @Override void say(){} @Override void spea(){} }
idea的方便之處,會爆紅:
在這里插入圖片描述
會提示錯誤,并給出解決方法
在這里插入圖片描述
意思就是,你的父類沒這個方法,下面的上移就是講這個方法在父類實現。
改正確,就不會爆紅:
在這里插入圖片描述
2. @Deprecated
中文意思:不宜用
就是這個方法已經不適合使用了
public class Ex5_8 { public static void main(String[] args) { Good a = new Good(); a.say(); } } class Good{ @Deprecated void say(){} void speak(){} }
這樣看代碼,不太直觀,還是放idea的截圖吧
say方法被@Deprecated注解,在實例化調用的時候,就會有刪除線,意思就是,這個方法已經不適合使用了。
4.注解的屬性
注解也有屬性,和類一樣。
用法是這樣
@interface Text{ int id(); String value(); } @Text(id=1, value="s") class Good{ void say(){} void speak(){} }
定義注解屬性的時候,類型 屬性名();
屬性可以有默認值,默認值需要用default關鍵字傳遞
類型 屬性名 default 值
@interface Text{ int id() default 0; String value(); } @Text(id=1, value="s") class Good{ void say(){} void speak(){} }
Java注解
好嘛,好嘛,又到了傷腦筋的時候啦!
講真的,之前Java這三大高級特性,我一聽名字就感覺到了一股殺氣!哇,泛型,反射,注解,這都是什么高級詞匯,一聽就很難學! 后來學了后發現,嗯,沒感覺錯,確實是很難學!哈哈哈(笑啥笑,難學還挺開心)
今天我們的主角是注解。好家伙,注解。啥東西啊,看著就沒思路。 不要慌,問題不大
我們先看看比較官方的解釋:Java 注解用于為 Java 代碼提供元數據。作為元數據,注解不直接影響你的代碼執行,但也有一些類型的注解實際上可以用于這一目的。
看看官方解釋,再結合字面意思,咦,貌似有點內個意思了哈。
上面清晰的寫著,注解不直接影響你的代碼執行,意味著什么,意味著我們從字面理解的意思,是差不多對的。 好,總結一下,注解就是:聲明我們的代碼中的方法,屬性,類,接口等作用的,而且和注釋不同的一個東西。
而且而且,貌似你可以這么理解,我給你一個注解,像不像我給你扣了一個大帽子。
比如說你初學Java,進了一個Java群,你剛好會了一個新知識,這時候有一個比較活躍的群友問了這個問題,你洋洋灑灑的說了出來,頓時這個人就給你套了個大佬的帽子,因為他是活躍群友,所有你一冒頭他就喊你是大佬,這樣你在別人眼里也就是大佬了。
而注解就相當于是我給代碼套了個帽子,讓別的程序員一下就能看出來他是干嘛的 。
1.常規注解
Java代碼中的注解就是這種形式的
在代碼上面有個 : @Xxxx 的東西
應該見過,也可能沒見過,不過就是這個東西,這是用法
那么怎么創造一個注解呢
其實特別簡單,格式如下:
@Interface Xxx{}
沒了,就這么簡單
那么我們就動動小手 創建一個我們能的注解吧
//定義一個 什么都沒有的 注解 @interface Isthis{ }
這就定義好我們自己的注解了
上面我們已經定義了一個注解,那么怎么使用呢
只需要將我們自己定義的注解(名詞)放在我們需要注解(動詞)的代碼上面,就像這樣
//定義一個 什么都沒有的 注解 @interface Isthis{ } //使用你的注解 @Isthis class Good{ }
我們定義了一個空的注解,也定義了一個空的類,并將我們的注解用在了我們的類上面
當然,這樣很不直觀,那么我們就實例化一個對象來看看
public class Ex5_8 { public static void main(String[] args) { Good a = new Good(); System.out.println(a); } }
運行結果為:
然后再將注解去掉看看
public class Ex5_8 { public static void main(String[] args) { Good a = new Good(); System.out.println(a); } } class Good{ }
運行結果為:
是一樣的,說明注釋對我們的代碼沒有影響
2.元注解
什么是元注解?能給注解進行注解的注解。
哈哈哈,是不是有點套。沒事,這樣看:
元注解是能給注解(我們之前定義的)進行注解(注釋解釋)的注解(名詞,注解)。
這就很清晰了吧。
我們的元注解有以下幾種,下面我將帶領大家看看。
Retention的意思是保留。根據見名知意的理解,其實這個元注解的作用其實就是注解的保留時間,也就是這個注解能保留到什么時候。
注解也有方法,我們來看看這個保留注解的方法
SOURCE
被這個屬性注解的注解,只在源代碼中能看到,起作用
用法是這樣:
@Retention(RetentionPolicy.SOURCE) @Interface Text{}
CLASS
被這個屬性注解的注解,在class文件中也可以看見,但是不會被我們的Java虛擬機加載
用法:
@Retention(RetentionPolicy.CLASS) @interface Text{ }
RUNTIME
會被Java虛擬機加載
@Retention(RetentionPolicy.RUNTIME) @interface Text{ }
中文意思是:備有證明文件的。好吧,這個意思就不是那么清晰了
這個元注解的作用是將我們的注解加載到javadoc中,這個javadoc是我們的Java程序中所有的文檔注釋(/** */)產生的注視文檔。
而這個元注解就是可以讓我們的注解也進入這個文檔。
中文意思是:目標。
作用是:告訴注解,你該用到哪里,就是說被這個注解的注解可以注解什么類型的數據
大白話:我告訴你,你只能給類進行注解,那你就只能給類注解,放別的地方就會報錯。
具體使用如下:
可以給注解進行注解,是不是想到了元注解,沒錯,可以看看元注解的源碼,都被這個注解過
@Target(ElementType.ANNOTATION_TYPE) @interface Text{ }
可以讓注解給構造方法注解
@Target(ElementType.CONSTRUCTOR) @interface Text{ }
可以讓注解給屬性進行注解
@Target(ElementType.FIELD) @interface Text{ }
可以讓注解給局部變量進行注解
@Target(ElementType.LOCAL_VARIABLE) @interface Text{ }
可以讓注解給方法進行注解
@Target(ElementType.METHOD) @interface Text{ }
可以讓注解給包進行注解
@Target(ElementType.PACKAGE) @interface Text{ }
可以讓注解給方法變量進行注解
@Target(ElementType.PARAMETER) @interface Text{ }
中文意思:繼承
被此元注解 注解(動詞) 的注解(名詞),如果注解了一個類A,類A被類B繼承,那么,類B同樣繼承類A的注解。
@Inherited @interface Text{ } @Text class Good{ } class Good_son extends Good{}
這里的Good_son類雖然看起來沒有被注解,但是因為Inherited元注解的存在,他也繼承了Good的注解@Text.
3.標準注解
標準注解就是直接作用在別的數據上的 什么是數據?變量,方法,類,接口,枚舉。。。
中文意思:重寫
保證Override重寫聲明的正確性。
是不是很眼熟,沒錯就是了類里面的重寫父類方法,這個注解的作用就是用在子類需要重寫的時候。
如果父類沒有你要重寫的方法,就會出錯誤。這里我們故意出錯看看錯誤
class Good{ void say(){} void speak(){} } class Good_son extends Good{ @Override void say(){} @Override void spea(){} }
idea的方便之處,會爆紅:
會提示錯誤,并給出解決方法
意思就是,你的父類沒這個方法,下面的上移就是講這個方法在父類實現。
改正確,就不會爆紅:
中文意思:不宜用
就是這個方法已經不適合使用了
public class Ex5_8 { public static void main(String[] args) { Good a = new Good(); a.say(); } } class Good{ @Deprecated void say(){} void speak(){} }
這樣看代碼,不太直觀,還是放idea的截圖吧
say方法被@Deprecated注解,在實例化調用的時候,就會有刪除線,意思就是,這個方法已經不適合使用了。
4.注解的屬性
注解也有屬性,和類一樣。
用法是這樣
@interface Text{ int id(); String value(); } @Text(id=1, value="s") class Good{ void say(){} void speak(){} }
定義注解屬性的時候,類型 屬性名();
屬性可以有默認值,默認值需要用default關鍵字傳遞
類型 屬性名 default 值
@interface Text{ int id() default 0; String value(); } @Text(id=1, value="s") class Good{ void say(){} void speak(){} }
Java
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。