#反射機制 AVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。 Java反射機制在框架設計中極為廣泛,需要深入理解。 ##反射基礎 RTTI(R ...
反射機制
AVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。
Java反射機制在框架設計中極為廣泛,需要深入理解。
反射基礎
RTTI(Run-Time Type Identification)運行時類型識別,其作用是在運行時識別一個對象的類型和類的信息。
反射就是把java類中的各種成分映射成一個個的Java對象
例如:一個類有:成員變數、方法、構造方法、包等等信息,利用反射技術可以對一個類進行解剖,把個個組成部分映射成一個個對象。
反射的使用
TIP
基於此我們如何通過反射獲取Class類對象以及類中的成員變數、方法、構造方法等
輸出的結果
註解和反射
* 註解:Annotation,Java標註,JDK5引入的一種機制。
* Java中類,方法,變數,參數,包都可以被標註
*
* 元註解:專門給註解加的註解
我們發現註解中可以有方法,
* 1、定義方法的格式:String name();
* 2、可以有預設值,也可以沒有,如果沒有預設值在使用的時候必須填寫對應的值
* 如果需要有預設值,使用default指定預設值。
* 3、如果想在使用的時候不指定具體的名字,
*
* 如果不學習反射,註解沒啥用!!!
在java的整個的註解體系中,有3個非常重要的主幹類,
* 1、Annotation 介面,定義一些常用的方法
* 2、ElementType 枚舉
* 它用來指定註解的類型。說人話,我的註解要用在哪裡???
* 3、RetentionPolicy 枚舉
* 它用來指定註解的策略。不同類型的策略指定的註解的作用域不同。
* (1)SOURCE,註解僅存在於編譯器處理期間,編譯期處理完之後,這個註解就沒用了
* (2)CLASS,註解在.class文件中依然有效。
* (3)RUNTIME,編譯期是不起作用的,只有在運行期才由JVM讀取。
Java自帶的註解
10個。4個註解java.lang.annotation
6個註解在java.lang
作用在代碼上的註解
- 1、@Override,檢查該方法是否是重寫方法。如果返現其父類,或者是引用的介面中沒有該方法,會報錯
- 2、@Deprecated,標記的方法,過時的方法。
- 3、@SuppressWarnings編輯器去忽略警告
- 4、@SafeVarargs,JDK7支持忽略任何使用參數為泛型變數的方法或構造器產生的警告
- 5、@FunctionalInterface,JDK8開始支持,表示一個介面為函數式介面
- 6、@Repeatable,JDK8開始支持,標識某個註解可以在同一個聲明上使用多次
all:忽略所有警告
boxing:忽略裝箱、拆箱警告
rawtypes:使用生成時沒有指定數據類型
unchecked:忽略沒有進行類型檢查操作的警告
unused:忽略沒有使用的警告
元註解:
- 1、@Retention:標識這個註解作用域
- 2、@Documented:標記這個註解是否包含在用戶文檔中
- 3、@Target:這個註解可以修飾哪些信息
- 4、@Inherited:如果一個類用上了@Inherited註解,那麼其子類也會繼承這個註解
package com.jsoft.morning;
@Bean
public class Dog {
public String type;
private String name;
private String color;
public Dog() {
}
private Dog(String name){
this.name = name;
}
public Dog(String name, String color) {
this.name = name;
this.color = color;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@MyAnnotation(value = 20,age=10)
public void show(String str) {
System.out.println("show方法..." + str);
}
public String info() {
return "info方法";
}
private void fun() {
System.out.println("私有的fun方法...");
}
}
本文來自博客園,作者:阿薩德菩提子,轉載請註明原文鏈接:https://www.cnblogs.com/ychptz/p/16574275.html