關於EKT相關知識(類的反射)
阿新 • • 發佈:2020-08-21
| | reflect
提供類和介面,以獲得關於類和物件的反射資訊
1.實現了反射的類:
Class類:代表一個類。
Field 類:代表類的成員變數(成員變數也稱為類的屬性)。
Method類:代表類的方法。
Modifier類:代表修飾符。
Constructor 類:代表類的構造方法。
Array類:提供了動態建立陣列,以及訪問陣列的元素的靜態方法
2.java反射機制:
1)在Java執行時 環境中,對於任意一個類,能否知道這個類有哪些屬性和方法?
2) 對於任意一個物件,能否呼叫他的方法?這些答案是肯定的,這種動態獲取類的資訊,以及動態呼叫類的方法的功能來源於JAVA的反射。從而使java具有動態語言的特性。
3.程式碼示例
1)注意事項:
a.執行jdk環境版本:jdk1.8.0_131
b. 編譯工具:Idea 2018 版本
2)Contructor類實現反射:
程式碼示例:
package com.liujie.demo.Demo2;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Modifier;
public class Demo2 {
public static void main(String[] args)throws SecurityException,
NoSuchMethodException, IllegalArgumentException, InstantiationException,
IllegalAccessException, InvocationTargetException {
//反射String類的所有構造方法
Class clz= Student.class;
System.out.println("所有構造方法");
//Constructor[] cons=clz.getConstructors();
Constructor[] cons=clz.getDeclaredConstructors();
for (Constructor con : cons) {
System.out.println("Constructor構造方法為:"+con+"訪問修飾許可權:"+ Modifier.toString(con.getModifiers()));
}
//找無參的構造方法 Student s = new Student();
Constructor con = clz.getDeclaredConstructor();
Object obj = con.newInstance();
System.out.println("++++++++++++++++++");
System.out.println(obj);
//找帶string,int型別引數的構造方法 Student s = new Student("zhangsan",12)
con = clz.getDeclaredConstructor(String.class, int.class);
obj = con.newInstance("zhangsan", 12);
System.out.println(obj);
con = clz.getDeclaredConstructor(String.class);
obj = con.newInstance("zhangsi");
System.out.println(obj);
}
}
控制檯執行結果:
心得:
在程式設計師這行,既然你進來了,你就得準備好滿滿的熱情,等待競爭強烈的網際網路企業猛烈的風雨摧殘,
平均程式設計師一萬多的工資畢竟也不是擒手就來的