package com.zyf.day27_1.c_reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import org.junit.Test;
//反射技术
public class App {
//1、创建对象
// @Test
// public void testInfo() throws Exception{
// Admin a = new Admin();
// //类全名
// String className = "com.zyf.day27_1.c_reflect.Admin";
// //得到类字节码
// Class<?> clazz = Class.forName(className);
// //创建对象
// //Admin admin = (Admin)clazz.newInstance();
// //创建对象2:通过构造器创建
// Constructor<?> constructor = clazz.getDeclaredConstructor(String.class);
// Admin admin = (Admin) constructor.newInstance("Bob");
// }
/* @Test
//2、获取属性名或值
public void testField() throws Exception{
String className = "com.zyf.day27_1.c_reflect.Admin";
Class<?> clazz = Class.forName(className);
Admin admin = (Admin) clazz.newInstance();
//获取说有属性名称
Field[] fs = clazz.getDeclaredFields();
//遍历:输出每一个属性名称
for(Field f : fs){
//设置强制访问
f.setAccessible(true);
//名称
String name = f.getName();
//值
Object value = f.get(admin);
System.out.println(name + ": " +value);
}
}*/
@Test
//3、反射获取方法
public void testMethod() throws Exception{
String className = "com.zyf.day27_1.c_reflect.Admin";
Class<?> clazz = Class.forName(className);
Admin admin = (Admin) clazz.newInstance();
Method m = clazz.getDeclaredMethod("getId");
//调用方法
Object r_value = m.invoke(admin);
System.out.println(r_value);
}
}
package com.zyf.day27_1.c_reflect;
public class Admin {
//Field
private int id = 1000;
private String name = "大厦";
//Constructor
public Admin(){
System.out.println("Admin.Admin()");
}
public Admin(String name){
System.out.println("Admin.Admin()" + name);
}
//Method
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
08-03
2490