JAVA基础之反射(Reflect)

反射

  • 动态获取类的字节码文件,并对其成员进行抽象(就是想通过字节码文件直接创建对象)
  • 字节码文件
  • .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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值