寫在前面
本文目的:讓你能知道注解是什么東西,看懂注解的元注解包蓝,以及常見的注解驶社。
其他:本文的注解有動詞意思也有名詞意思,動詞的意思是注釋测萎,解釋的意思亡电。
本文結(jié)構(gòu)
1.小例子解釋
2.怎么看注解(元注解解釋)
3.常見注解
正文
一、先看一個例子
以下是Android中截取的一段代碼
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
Override是我們最常見的注解硅瞧,意味著這個方法必須是重寫父類的方法份乒,如果沒有重寫,編譯器就會給出錯誤警告
查看Override注解源代碼:
- 注解的類型(必須)是@interface腕唧,表示@Override是一個注解
- 這個注解用用兩個(元)注解注解
@Target:說明Override注解只能注解方法
@Retention:說明注解的訪問范圍(有效范圍)是在.java中或辖,不會在.class中,運行時也看不到枣接。
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
二颂暇、什么是元注解?
元注解就是標記在注解上的注解月腋。
元注解一共有以下幾種:前面四種是java5引入蟀架,第五種是Java8中引入的。
(1.8 java.lang.annotation包還引入了@Native榆骚,它不是元注解片拍,它是指明該方法調(diào)用底層的C/C++方法)
-
@Target:指明該注解的可標記范圍
元素類型 | 適用于 |
---|---|
TYPE | 類,接口妓肢,注解類捌省,枚舉類 |
ANNOTATION | 注解類 |
FIELD | 類屬性 |
LOCAL_VARIABLE | 方法變量 |
METHOD | 方法 |
CONSTRUCTOR | 構(gòu)造方法 |
PACKAGE | 包(沒見過) |
PARAMETER | 方法中的參數(shù) |
TYPE_PARAMETER(1.8) | 類參數(shù)(沒見過) |
TYPE_USE(1.8) | 類型(沒見過) |
-
@Retention:用來指明該注解的生效范圍
元素類型 | 范圍 | 主要作用 |
---|---|---|
SOURCE | 源代碼(在編譯成class文件時不再保存) | 用于標記提醒程序員以及IDE工具檢測等 |
CLASS(默認) | 源代碼和.class(編譯時保存,但是在運行在VM的時不保存) | 用于框架(如butterknife,dagger2等)碉钠,利用編譯時產(chǎn)生我們想要的java文件,沒有用到反射不損耗性能纲缓,但是會增加類和方法數(shù)卷拘,注意64K限制 |
RUNTIME | 源代碼,.class文件祝高,運行時都存在 | 一般與反射配合使用 |
-
@Documented:在生成javadoc的時候?qū)⒆⒔庵械脑貎?nèi)容包含到j(luò)avadoc中栗弟。一般javadoc不會包含注解內(nèi)容。
-
@Inherited:注解可繼承的意思工闺。
例:
1.用@Inherted 注解了@Annotation_A
2.用@Annotation_A注解了類A
3.B繼承A
4.B其實也繼承了A的注解@Annotation_A
-
@Repeatable(java.1.8):表明該注解可以重復(fù)注解(需要指定重復(fù)注解等價注解)
假如我們要做一個蛋糕乍赫,用注解方法的確定蛋糕的顏色組成。代碼:
public class Cake {
/**
* 1.8之前
*/
@Colors({@Color(name = "red"), @Color(name = "blue")})
public void Create() {
...
}
/**
* 1.8注解方式陆蟆。我們只需要在Color注解類上添加注釋@Repeatable(Colors.class)雷厂,就可以用這種方式注解,等價于上面的方式
*/
@Color(name = "red")
@Color(name = "blue")
public void createCakeNew() {
...
}
}
注解類Color:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(Colors.class)//表示重復(fù)注解等價于Colors
public @interface Color {
String name() default "white";
}
注解類Colors
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Colors {
Color[] value();
}
三、常見注解
java.lang包下的基本注解簡單介紹叠殷,更詳細內(nèi)容可以自行查看源碼注釋文檔(1.7 1.8新增的暫時不介紹)
注解 | 級別 | 作用 |
---|---|---|
@Ovrride | SOURCE | 重寫父類方法 |
@Deprecated | RUNTIME | 提示該包/類/方法/變量已經(jīng)棄用改鲫,棄用原因可能是有bug或者有更優(yōu)的替代者 |
@SuppressWarnings | SOURCE | 抑制IDE警告,在最小的范圍使用林束,比如能在方法注釋就在方法注釋像棘,如若在類上使用會抑制這個類內(nèi)的所有警告。 |
結(jié)語
全文如果有不正之處還望指正诊县!