JAVA基础之反射(Reflect)

末鹿安然 提交于 2019-11-26 14:18:20

反射

  • 动态获取类的字节码文件,并对其成员进行抽象(就是想通过字节码文件直接创建对象)
  • 字节码文件
  • .class本身是对象
  • 表示字节码文件的属性的属性
private Field field;
  • 表示字节码文件的普通方法的属性
private Method method;
  • 表示字节码文件的构造方法的属性
private Constructor con;
  • 反射的过程

1.获取字节码文件对象

Class.forName("包名+类名");

2.通过字节码文件对象获取对应的实例对象

  ① 无参构造

public static void fun1(Class<?> cls) throws .....{

    Object object=cls.newInstance();

}

② 有参构造

public static void fun1(Class<?> cls) throws .....{

    Constructor constructor=cls.getConstructor(String.class,int.class);  //可变参数

        //constructor是有参构造方法的对象

    Object object=constructor.newInstance("zdsg",20);

}

3.给属性赋值(通过从属性中提取出来的类–Field)

  Field field1=cls.getDeclaredField("name");

  field1.setAccessible(true);

  field1.set(object,"zdsg");

  System.out.println(field1.get(object));

4.调用方法(通过从方法中提取出来的类–Method)

① 调用非静态无参

    Method method=cls.getMethod("show");

    method.invoke(object);



②调用非静态有参

    Constructor constructor=cls.getConstructor(String.class,int.class);

    Object object=constructor.newInstance("zdsg",20);

    Method method2=cls.getMethod("zdsg",int.class);

    method2.invoke(object,"110");



③调用静态有参

    Method method3=cls.getMethod("run",int.class);

    method4.invoke(null,11);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!