JAVA高级----反射机制(二)

承接博客JAVA高级---反射机制(一)

4.基于反射获取类信息

通过Field,Constructor.Method类获取类的属性,构造方法和方法

通过.getFields()/getDeclaredFields()方法获取所有属性的field对象(包含类对象属性的名称和类型)

field类对象有getName()和getType()方法展示类对象属性的属性,getFields()方法能获取非privated修饰的属性,而getDeclaredFields()方法能获取所有(包括私有)的属性.

 同理,可以通过设置String类型的形参获取指定的属性,同样的一般的getField(String Name)方法只能获取非私有的属性而getDeclaredField(String Name)方法则可以无条件获取指定的属性.

 和getFields()/getDeclaredFields()/getField(String Name)/getDeclaredField(String Name)方法类似的还有getMethods()/getDeclaredMethods()/getMethod(String Name)/getDeclaredMethod(String Name)用来获取类的所有方法/指定方法,用法和作用范围与上述一致

 

 此外就是构造方法的调用,构造方法一般有无参构造和有参构造两种,获取无参构造的Constructor对象和能简单,只要使用Class对象的实例方法.getConstructor()方法就能获取,而有参构造对象获取需要加入有参构造形参相对应的Class对象参数才能获取.

5.基于反射生成类的实例

既然Class对象能获取类的构造方法对象,那么就能获取类的实例对象,使用Constructor类的newInstance()方法即可获取一个类的实例对象,下图说明有参构造可以有多个,相应的Class类对应的Constructor对象也可以有复数个,由于这些构造方法对象的创建可能有异常,所以需要try/catch解决异常,需要注意的是通过Class对象获取构造方法对象继而获取实例对象所获得的对象和一般new出来的对象是一样的吗,没有区别.

额外补充

此外,通过实例对象我们能很简单调用对象的实例方法,而我们如果不通过实例对象调用实例方法,则需要使用方法对象的invoke(object o)方法去调用.

5反射的优缺点和应用场景

优点:

运行期类型的判断,动态类加载

提高了程序的灵活性,拓展性,降低耦合性

提高自适应能力,无需提前硬编码目标类

缺点:

性能问题

安全限制

内部暴露

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

地球在逃人员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值