根据class强转数组_获取反射入口(class对象)的三种方法

要想操作反射,必须先拿到反射的入口

1,通过通过Class.forName("全类名")

try {

Class> perClazz = Class.forName("reflect_fanshe.Person");

System.out.println(perClazz);

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

2,类名.class

Class> perClazz2 = Person.class;

3,对象.getClass()

Person person = new Person();

Class> perClazz3 = person.getClass();

三,根据反射入口对象(class)获取类的各种信息

可以用一个类的反射入口class对象获取类的所有信息

例1:perClazz.getMethods() 获取此类的所有public方法(父类的,实现接口的,自己的)

Class> perClazz = null;

try {

perClazz = Class.forName("reflect_fanshe.Person");

} catch (ClassNotFoundException e) {

e.printStackTrace();

}

Method[] methods = perClazz.getMethods();

//遍历所有方法

for (Method method : methods) {

System.out.println(method);

}

}

例2:获取所有的构造方法

9730d884e580aedc1ecec8b62fe4bf51.png

例3: 获取父类

9a8889b8d1d7214af5e724f3a5f408a5.png

例4:获取当前类(只有本类的)的所有方法和属性,包括私有的

8fa0832ee8af3bb033778ed9235fd596.png
8ee1fdfe50d2b8af7999eb0e9bc7dd5c.png

重要:可以获取当前类的对象,并通过对象调用类的方法

四,通过反射获取对象的实例,并操作对象

1,class.newInstance() ,并强转类型,然后就可以操作对象了,主要是调用方法。

4e6efc3d0c5d6fbb735c5026048f8925.png

2,操作属性,可以操作类里面的public属性和private属性

如果属性是private,正常情况下是不允许外界操作属性值,这里可以用Field类的setAccessible(true)方法,暂时打开操作的权限

8da0495af20a8ff23fe078f44e61c230.png

调用方法也一样,可以调用私有的方法,null是因为这个方法没有参数

322a39b1cfdfd228e9289a89e29423ef.png

五,在 程序执行中,动态的决定调用的类,以及方法

在本例中,程序执行之前,程序根本不知道具体的类和方法名是什么,需要执行时解析properties文件,但是反射就可以办到。

配置文件:

b83c0f8922ffde466c23fcad681d7a89.png

反射机制:

8d7efef33808a9fc993fd8e18059d68b.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值