Java反射的簡單使用
阿新 • • 發佈:2021-07-12
一.反射是什麼
在執行狀態中,對於任意一個類,都能知道這個類中的所有屬性和方法。對於任意一個物件,都能呼叫它的任意一個方法和屬性。這種動態獲取的資訊以及動態呼叫物件的方法的功能稱為Java的反射機制。
所以通俗地說,反射就是在執行時,只要知道要操作的類是什麼,就可以獲取類的完整構造和呼叫對應的方法。
二.反射的使用
一般使用一個類,我們都是知道這個類,可以直接通過new建立物件來使用。
而反射則是不知道這個類,不能用new建立物件的情況下,使用反射的API來呼叫該類的屬性或方法。
下面是一個簡單的例子。
public class User { private String name;//get set... }
public class DemoApplication { public static void main(String[] args) throws Exception { //正常情況下,建立類來呼叫 User user = new User(); user.setName("jade"); System.out.println("name:" + user.getName()); //使用反射來呼叫 Class cls = Class.forName("com.example.demo.model.User"); Constructor userConstructor = cls.getConstructor(); Object userObj = userConstructor.newInstance(); Method setNameMethod = cls.getMethod("setName", String.class); setNameMethod.invoke(userObj,"sam"); Method getNameMethod = cls.getMethod("getName"); System.out.println("name:" + getNameMethod.invoke(userObj)); } }
我們是通過反射使用set方法來傳值,然後用反射使用get方法來獲取值。上面執行的結果是:
name:jade
name:sam
使用反射獲取物件的步驟:
1.獲取類的Class例項物件。
Class cls = Class.forName("com.example.demo.model.User");
2.根據Class物件獲取Constructor物件。
Constructor userConstructor = cls.getConstructor();
3.使用Constructor物件的newInstance方法獲取反射類物件。
Object userObj = userConstructor.newInstance();
呼叫物件中的方法步驟:
1.獲取方法的Method物件。
Method setNameMethod = cls.getMethod("setName", String.class);
2.利用invoke呼叫方法。
setNameMethod.invoke(userObj,"sam");
這樣就是反射的基本使用方式。