註解的超容易入門(底層原理講解)!!

先簡單解釋一下,註解是拿來幹嘛使的。
簡單的說,註解就是拿來給JVM看的,但是不參與編譯。也就是說註解引導JVM做一些操作,但不對源碼的執行產生影響。

JDK預定的註解

在Java中有一些常用的註解,已經由JDK幫我們定義好了,我們可以直接使用,(我)常用主要是以下三個:
1.@Override:重載
2.@Deprecated:表示該方法過期
3.@SuppressWarnings:壓制警告
用法:@SuppressWarnings(“all”)表示壓制所有的警告

自定義註解

自定義註解嘛顧名思義就是,自己按照自己的需求來定義一些註解。
在定義註解的時候,JDK還提供了一些用來修飾註解的註解,我們稱之爲“元註解”。

元註解

@Target:表示定義的註解的作用位置在哪裏
一般取值如下:

取值 作用位置
TYPE
METHOD 方法
FIELD 變量

@Retention:該註解保留的生命週期
一般取值爲RunTime
@Documented:標記該註解可否被抽取到API文檔中
@Inherited:該註解可否被其子類繼承

在定義註解時,會通過上述四個註解,來規定註解的一些規範。

定義註解

public @interface AnnotationName{
	屬性列表;
	//屬性列表類似接口中抽象方法的定義,可以定義的類型爲:基本數據類型、String、枚舉、註解及上述四種的數組
}

注意:如果在定義時使用了default值,在使用註解時可不進行屬性賦值。

註解的本質
實現Annotation接口,註解中的每個屬性就是對應抽象方法返回一個返回值。舉個例子:
a.定義註解@pro:

public @interface pro{
	String ClassName();
}

b.對這段代碼編譯完成後的.class文件進行反編譯可以得到如下代碼:

public class pro implement Annotation{
	public String ClassName(String Name){
		return Name;
	}
}

可以發現,其實,註解的本質就是實現了Annotation接口。

使用自定義註解

1.獲取使用註解標註的類的對象的字節碼文件對象
2.獲取註解對象
本質:在內存中生成了一個該註解接口實現類的對象
3.調用註解對象中定義的抽象方法,獲取返回值

好煩,上面這段文字都是啥,看個代碼吧

a. 定義一個註解

public @interface pro{
	String ClassName();
	String MethodName();
}

b.定義一個使用該註解的業務類

@Pro(ClassName = "...",MethodName = "...")//使用a中定義的註解
public class ReflectTest{
	...;
	...;
	...;
}

c.如何使用自定義註解

Class <ReflectTest> refTest = ReflectTest.class;//獲取使用註解標註的類的對象的字節碼文件對象
Annotation ann = refTest.getAnnotation(pro.class);//獲取註解對象
String className = ann.ClassName();//獲取註解中ClassName值
String methodName = ann.MethodName();//獲取註解中MethodName值

完成!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章