反射的基本操作

一、反射是什么

在类加载的时候,堆中会产生一个Class类型的对象。每一个类只有一个Class对象,我们可以通过Class对象,看清楚类的结构。这个就是所谓的反射。

二、如何使用反射

  1. 首先获取class类对象

  1. 获取所需构造器

  1. 通过构造器创建对象

  1. 获取方法对象

  1. 调用方法

  1. 获取属性对象

  1. 输出

三、具体操作

  1. 首先获取class类对象

共有4中方式

在编译阶段:

Class<?> aClass = Class.forName("Dog.java");

Class类加载阶段:

Class<Dog> dogClass = Dog.class;

在运行阶段:

Class<?> aClass1 = dog.getClass();

通过类加载器:

ClassLoaderclassLoader= Practice0.class.getClassLoader();

Classs= classLoader.loadClass("全类名");

2.获取构造器

获取无参构造器为对象:

Object o = cla.newInstance();

获取有参public构造器对象:

Constructor<?> constructor = cla.getConstructor(String.class, String.class);

Object o1 = constructor.newInstance("1", "2");

获取有参private构造器对象:

Constructor<?> constructor1 = cla.getDeclaredConstructor(String.class, int.class);

constructor1.setAccessible(true);//反射爆破

Object o2 = constructor.newInstance("1", 1);

3.调用方法

根据方法名和参数获取public方法对象:

Method method = cla.getMethod("qqq", String.class);

method.invoke(o,"name");

根据方法名和参数获取private方法对象:

Method method = cla.getDeclaredMethod("qqq", String.class);

method.setAccessible(true);

method.invoke(o,"name");

  1. 访问成员

访问public的属性:

Field name = cla.getField("sal");

name.set(o,88);

System.out.println(name.get(o));

访问private的属性

Field name = cla.getDeclaredField("name")

name.setAccessible(true);

name.set(o,"aa");

System.out.println(name.get(o));

4.访问static属性和方法

method.invoke(null,参数)

name.set(null,参数)

name.get(nill)

应为静态方法跟属性,对于该类所有对象来说都是一样的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值