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;
}
}