1. 程式人生 > 其它 >反射-獲取反射物件(功能、優點和缺點、主要API)

反射-獲取反射物件(功能、優點和缺點、主要API)

Java反射機制提供的功能
在執行時判斷任意一個物件所屬的類在執行時構造任意一個類的物件
在執行時判斷任意一個類所具有的成員變數和方法在執行時獲取泛型資訊
在執行時呼叫任意一個物件的成員變數和方法≥在執行時處理註解
生成動態代理
Java反射優點和缺點一
優點:
可以實現動態建立物件和編譯,體現出很大的靈活性
缺點:
對效能有影響。使用反射基本上是一種解釋操作,我們可以告訴JVM,我們希望做什麼並且它滿足我們的要求。這類操作總是慢於直接執行相同的操作。
反射相關的主要API
>java.lang.Class :代表一個類
java.lang.ref.ect.Method :代表類的方法
java.lang.reflect.Field :代表類的成員變數
java.lang.reflect.Constructor :代表類的構造器
在Object類中定義了以下的方法,此方法將被所有子類繼承
public final Class getClass()

以上的方法返回值的型別是一個Class
類,此類是Java反射的源頭,實際上所謂反射從程式的執行結果來看也很好理
//測試什麼是反射
public class Main {
    public static void main(String[] args)throws ClassNotFoundException {
        //通過反射獲取類的class物件
       Class c1= Class.forName("要填寫類的包路徑");
       System.out.println(c1);
//列印看看反射出來的物件是怎麼樣的,可以通過c1.,來檢視他可以使用的方法 //建立多個class,使用hashCode來看看他們是否相等,如果hashCode一樣,就表示他們是一個類 Class c2= Class.forName("要填寫類的包路徑"); Class c3= Class.forName("要填寫類的包路徑"); Class c4= Class.forName("要填寫類的包路徑"); //一個類在記憶體只,只有一個class物件 //一個類被載入後,類的整個結構都會被封裝在Class物件中 System.out.println(c2.hashCode()) System.out.println(c3.hashCode()) System.out.println(c4.hashCode()) } }
//實體類:pojo,entity:來表示實體類 class User{ private String name; private int id; private int age; public Uset(){ } public User(String name,int id,int age){ this.name=name; this.id=id; this.age=age; } public void setNmae(String name){ this.name=name; } public String getName(){ return name; } //------------------ public void setId(int id){ this.id=id; } public int getId(){ return id; } //-------------- public void setAge(int age){ this.age=age; } public int getAge(){ return age; } //輸出方法 public String toString(){ return "User{"+"name="+name+"id="+id+"age="+age+"}" } } }