「Java高级」反射
1-获取Class实例的三种方式
@Test
public void test1() throws ClassNotFoundException {
// 1
Class c = MyPerson.class;
System.out.println(c);
// 2
Class c2 = Class.forName("Reflcetion.MyPerson");
System.out.println(c2);
// 3
MyPerson mp = new MyPerson();
Class c3 = mp.getClass();
System.out.println(c3);
2-Class类的理解
Class文件会在对象运行时产生,可以通过获取Class对象,得到这个运行时的对象,然后获取这个对象的构造方法、成员变量、成员方法;
关于获取方法,可以获取公共、自身所有的构造方法、成员变量、成员方法,是否有Declared关键字成为了区分;
3-创建Class对应运行时类的对象
@Test
public void test2() throws IllegalAccessException, InstantiationException {
// 获取class类
Class c = MyPerson.class;
Object obj = c.newInstance();
System.out.println(obj);
4-反射调用方法
@Test
public void test3() throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {
Class c = MyPerson.class;
Method show = c.getMethod("show");
Object obj = c.newInstance();
show.invoke(obj);