package com.ics.day10_14;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ReflectDemo {
public static void main(String[] args) {
String path = "com.ics.day10_14.User";
try {
Class<?> cla = Class.forName(path);
//调用User的无参构造方法实例化一个对象
User user = (User) cla.newInstance();//已过时
//使用有参构造器
Constructor<User> cons = (Constructor<User>) cla.getDeclaredConstructor(String.class, int.class);
User user2 = cons.newInstance("zhangsan",18);
System.out.println(user2.getName()+"---------"+user2.getAge());
//通过反射api调用成员方法
Method method = cla.getDeclaredMethod("setName", String.class);
method.invoke(user, "lisi");
System.out.println(user.getName());
//通过反射操作属性
Field field = cla.getDeclaredField("age");
field.setAccessible(true);
field.set(user, 30);
System.out.println(user.getName()+"---------"+field.get(user));
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}