天天看點

通過反射機制擷取Class,再執行個體化對象

通過反射機制擷取Class,再執行個體化對象:

測試代碼:

package reflect;

public class Test02 {
    public static void main(String[] args) {
        // 不使用反射機制建立對象
        User u1 = new User(1001);
        System.out.println(u1);  // User{id=1001}

        // 使用反射機制建立對象
        try {
            // 擷取Class檔案
            Class cUser = Class.forName("reflect.User");

            // 使用new來完成對象的建立,它會調用對應類的無參數構造方法,你得先保證該類存在無參數構造方法
            Object obj = cUser.newInstance();  // 這個方法沒有參數
            System.out.println(obj);  // User{id=0}

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        }

    }
}

class User {
    int id;

    public User() {

    }
    public User(int id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "User{" + "id=" + id + '}';
    }
}