Life life = new Life(); Class class1 = life.getClass(); System.out.println(class1); // 2 任意数据类型都具备一个class静态属性 Class class2 = Life.class; System.out.println(class2); Class class3= Class.forName("com.reflect.Life"); System.out.println(class3); //三种方式的比较:前两种方式,我们必须明确Left类型,而第三种方式知道这种类型的字符串就行.这种扩展更强。 ``` ### 获取构造方法
```Java Class class3= Class.forName("com.reflect.Life"); //获取无参构造 Life life1 = (Life)class3.newInstance(); //获取有参构造 Constructor constructor = class3.getConstructor(String.class); Life life2 = (Life)constructor.newInstance("炸鸡"); ```
### 获取成员变量 ```Java Class class3= Class.forName("com.reflect.Life"); // getDeclaredFields() 获取当前类所有属性 // getFields() 获取公有属性(包括父类) Field fields[] = class3.getDeclaredFields(); // 取消安全检查才能获取或者修改private修饰的属性,也可以单独对某个属性进行设置 Field.setAccessible(fields, true); for (Field field : fields) { System.out.println("*******属性名:" + field.getName() + "***属性值:" + field.get(class3.newInstance()) + "****属性类型:" + field.getType()); } Field meal = class3.getDeclaredField("meal"); // 取消安全检查才能获取或者修改private修饰的属性,也可以批量对所有属性进行设置 meal.setAccessible(true); meal.set(class3.newInstance(), "啤酒");