1.反射機制

1.什麼是反射?
就是正在運行,動態獲取這個類的全部信息、
 
2.反射機制的做用
1.反編譯: .class->.java
2.經過反射機制訪問java對象的屬性,方法,構造器方法等。
 
 
運用
 
package com.jlong.classfrorm;
 
import com.jlong.entity.User;
 
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
 
public class ClassFrorm {
    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
        Class<?> forName = Class.forName("com.jlong.entity.User");
      /*  Object o = aClass.newInstance();
        User user = (User) o;
        System.out.println(user.toString());*/
        //有參構造器初始化變量
      /*  Constructor<?> constructor = aClass.getConstructor(String.class);
        Object jlong = constructor.newInstance("jlong");
        User user = (User) jlong;
        String name = user.getUserName();
        System.out.println(name);*/
        // 使用反射實例化對象 無參數構造函數
        Object newInstance = forName.newInstance();
        // 獲取當前類的 userId字段
        Field declaredField = forName.getDeclaredField("userName");
        // 容許操做私有成員
        declaredField.setAccessible(true);
        // 設置值
        declaredField.set(newInstance, "123");
        User user = (User) newInstance;
        System.out.println(user.getUserName());
 
 
    }
}
 
 
package com.jlong.entity;
 
public class User {
    private String userName;
    private String userId;
    public User(){
 
    }
    public User(String userName){
        this.userName=userName;
    }
 
    public String getUserName() {
        return userName;
    }
 
    public void setUserName(String userName) {
        this.userName = userName;
    }
 
    public String getUserId() {
        return userId;
    }
 
    public void setUserId(String userId) {
        this.userId = userId;
    }
}
相關文章
相關標籤/搜索