反射机制是什么?

反射机制是什么?

一直都知道反射很重要,但是反射就是不知道什么时候用,那是因为对反射理解的不够。

以下是我对反射机制的几个理解,也方便大家去理解。



1.反射机制:就是在程序运行的时候可以检查你所引用对象的切确类型,从而使你可以根据不同的类型

,做出不一样的动作.为什么需要这样的一个机制呢?看一个例子,多态性决定了我们可以通过一个

盛装父类的容器存放对应子类的类型,但是,不同的子类有各自的实现办法。当你对该容器的所有对象

进行共有方法的调用时,你会发现每一个对象都能正确的调用。这里面其实就涉及到了反射机制。



2.Class对象:世间万物都是对象。那么好,当你新建了一个类(注意不是一个类的实例)的时候,

这个类是不是对象呢?肯定是的啦。既然是对象,那么就会有属性,方法。如何获取呢?

我们可以通过反射获得你感兴趣的对象的Class类型信息。然后一切就柳暗花明又一村了。


3.jvm是如何保存类型对象的信息的?其实在我们第一次运行类的时候,都会生成一个后缀为.class的字节码文件

在以后的调用中,类的加载器就是靠着这个文件来判断你需要的对象是否存在,如果存在的话还要验证是否正确。

之后他就知道了每个对象的类型信息了。



4.有时候我们调试会发现,如果类里面有静态成员变量的时候,都是先调用了这个成员变量(因为预加载到内存)

再进行构造函数的调用的。也侧面说明了我们经常使用的构造函数其实是个静态方法,没有static修饰是因为类的

加载器知道它是静态的,所以不用你指定,也不能让你指定(社会总是有一套规章制度的嘛,不然就乱套了)。


5.获取Class的方法。简单粗暴的比如你在包com.hy.test下定义了一个person类,那么你可以通过三种方法获取
(Class.forName(com.hy.test.person)||(new person()).getClass()||person.class)。哈哈,你是不是发现什么了?
我person里边没有class这个属性啊,哪来的?原因在于每个类其实归根到底都是继承者object,那自然都是从这里来的了。
注意基本的数据类型虽然不是继承自object但是它也有class属性。反射获取到的是对应的包装类。建议使用最后一种方法,因为
他能够在编译阶段发现错误,不用捕获异常,最重要的是他的加载方式和前边两种是不一样的,最后一种的方法性能要高效。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值