主要方法:
public static void main(String[] args) throws Exception { Class<?> clazz = Class.forName("Person"); //得到類中所有方法,返回一個數組 Field[] fileds = clazz.getFields(); //得到所有方法包括私有方法 Field[] fields2 = clazz.getDeclaredFields(); //得到方法 Field field = clazz.getDeclaredField("name"); //暴力訪問,訪問私有屬性 field.setAccessible(true); //通過類實例化對象,通過調用類的無參構造器去實例化對象 Object object = clazz.newInstance(); //給對象屬性賦值 field.set(object, "hhh"); //對象類型 Class s = field.getType();//class java.lang.String System.out.println(s); //對象名稱 field.getName(); //獲取對象屬性值 field.get("name"); }
暴力訪問會破壞對象的封裝性,解決方法為:
//破壞封裝性,解決方式(內省機制): Class<?> clazz1 = Class.forName("Person"); // 創建對象 Object person = clazz1.newInstance(); // 獲得屬性描述器 PropertyDescriptor propertyDescriptor = new PropertyDescriptor("setName", clazz1); // 獲得set方法 Method setMethod = propertyDescriptor.getWriteMethod(); // 調用方法 person.setName("jack"); setMethod.invoke(person, "jack"); System.out.println(person);