package 反射机制;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;
public class 反射类名 {
public static void main(String[] args)
throws ClassNotFoundException, NoSuchFieldException, SecurityException, IllegalArgumentException,
IllegalAccessException, NoSuchMethodException, InstantiationException, InvocationTargetException, IOException {
Class cls = Class.forName(“反射机制.Person”);
System.out.println(cls);
Person p = new Person();
System.out.println(p.getClass());
// 成员变量
Class<Person> p1 = Person.class;
Field[] f = p1.getFields();
for (Field field : f) {
System.out.println(field);
}
System.out.println("------------------------------------");
Field a = p1.getField("name");
// 获取成员变量a的值
Object value = a.get(p);
System.out.println(value);
a.set(p, "小明");
System.out.println(p);
System.out.println("--------------------------------------------");
Field[] declaredFields = p1.getDeclaredFields();
for (Field f1 : declaredFields) {
System.out.println(f1);
}
Person p2 = new Person();
Field d = p1.getDeclaredField("name");
// 忽略权限修饰符
d.setAccessible(true);
Object k = d.get(p2);
System.out.println(k);
// 获取构造方法 们
Constructor cs = p1.getConstructor(String.class, int.class);
System.out.println(cs);
// 创建对象
Object person = cs.newInstance("张三", 14);
System.out.println(person);
// 获取空参构造
Object o = p1.newInstance();
System.out.println(o);
// 获取方法
Method m=p1.getMethod("eat",String.class);
//执行方法对
Person p5=new Person();
m.invoke(p5,"吃细化");
System.out.println("----------------------------------");
Method[] method=p1.getDeclaredMethods();
for(Method m4:method) {
System.out.println(m4);
}
//写一个框架类 配置文件 反射 需要执
**//创建Properties对象
Properties pro=new Properties();
//加载配置文件 转换为一个集合
//获取class目录下的配置文件
ClassLoader classloader=反射类名.class.getClassLoader();
InputStream is=classloader.getResourceAsStream("pro.properties");
pro.load(is);
//获取配置文件定义的数据
String ClassName=pro.getProperty("className");
String methodName=pro.getProperty("methodName");
//加载这个类进内存
Class cls1=Class.forName(ClassName);
//创建对象
Object obj=cls1.newInstance();
//获取方法对象
Method method1=cls1.getDeclaredMethod(methodName,String.class);
method1.invoke(obj,"2222");**