java的反射机制

一个类内部私有的方法不能通过new来调用,一般都是使用get,set方法来获取内部对象;

但是通过Class.forName(类名)是可以做到的,但是要牺牲性能。

另外,类加载的过程分为静态加载和动态加载两种;

记载编译就是一个将java文件class化的过程;

new关键字创建的对象是一个引用,但其实并不是类本体,是spring初始化时,扫描需要静态加载的类生成的,从始至终一直在容器里存活,即拿即用,但是代码需要被全部加载,及时你要用的只有一个类;

反射机制是动态加载,需要一个类对象的时候,Class方法执行后,会生成这个对象并加载到容器内。

因为很多jdk内置的类在环境内就是以字节码格式存储着,反射直接对这些class文件反编译获得类的对象即可。

比如有两个类A1,A2;

两个类作用等价,效果不同,如果我用的是A1,则newA1,后来需求变更,用A2,则把A1注掉,重写new一个A2。emmmm。

而反射呢,Class.forName(A1)-->Class.forName(A2)就好了,当然有人会说这不还是改代码吗,这只是举例子,我完全可以通过配置文件或者数据库,因为Class.forName()参数是个字符串,我是可以用过恰当渠道做到可配置的,而new不行。

对于程序的开发模式之前一直强调:尽量减少耦合,而减少耦合的最好做法是使用接口,但是就算使用了接口也逃不出关键字new,所以实际上new是造成耦合的关键元凶。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值