java反射機制(應用大於實踐)

定義:
加載一個運行時才知道的類以及它的完整內部結構。數組

Class<PeStudent> studentClass = PeStudent.class;函數

API解釋:
1 Class 類的實例表示正在運行的 Java 應用程序中的類和接口。
2 每一個數組,全部具備相同元素類型和維數的數組都共享該 Class 對象。
基本的 Java 類型(boolean、byte等)和關鍵字 void 也表示爲 Class 對象
3 Class 沒有公共構造方法。Class 對象是在加載類時由 Java 虛擬機以及經過調用類加載器中的 defineClass 方法自動構造的。 對象

應用:
Class對象獲取類加載器:
ClassLoader classLoader = PeStudent.class.getClassLoader();
經常使用來獲取文件絕對路徑:
String path = classLoader.getResource("").toURI().getPath();接口

獲取的構造函數進行建立對象:
Constructor[] constructors = PeStudent.class.getConstructors();
PeStudent peStudents = (PeStudent) constructors[0].newInstance("11","11","11");
System.out.println(peStudents);get

Constructor constructor = PeStudent.class.getConstructor(String.class, String.class);
PeStudent peStudent = (PeStudent) constructor.newInstance("aa", "cc");
System.out.println(peStudent);虛擬機

根據方法名稱以及參數Class對象,獲取指定的method
Method method = PeStudent.class.getMethod("method");
Method method = PeStudent.class.getMethod("aa", String.class);
System.out.println(method.invoke(new PeStudent("1", "2"), "張三"));class

經過Field類給字段設置值 getField、getDeclaredField 區別前者訪問公共成員,後者能夠訪問到全部成員
PeStudent peStudent = new PeStudent("原值name", "age3歲");
Field field = PeStudent.class.getDeclaredField("name");
field.setAccessible(true); // 參數值爲true,禁止訪問控制檢查
field.set(peStudent, "替換name");構造函數

isInstance 判斷是否爲某個類的實例
System.out.println(PeStudent.class.isInstance(new PeStudent()));程序

 

凌晨5點的北京你見過嗎?我沒有...方法

共勉

相關文章
相關標籤/搜索