资讯专栏INFORMATION COLUMN

Java学习笔记系列-反射

wing324 / 3315人阅读

摘要:反射的本质在运行时能够获得或判断某个对象的类型信息有一条前提就是某个对象的类型信息在编译时必须已知。反射在中用来支持其他特性的,例如对象的序列化和对象对象是进行反射操作的入口所以首先必须获得对象。

反射的本质

Java在运行时能够获得或判断某个对象的类型信息

RTTI有一条前提就是某个对象的类型信息在编译时必须已知。RTTI的实质就是编译器在遍历检查代码时偷偷将类型信息记录下来并存储,以在运行时能够获得当编写完某个.java文件,并编译之后,就会产生一个Class对象,由编译器偷偷的把这个class对象保存在编译后的.class文件中,当这个.class文件被加载到内存之后,随之会在内存中创建这个Class对象了。所以,获得class对象的前提是能获得类编译后的.class文件。且class对象的功能强大,方法众多:Class.getInterfaces()、Class.getSuperclass()、Class.getName()、Class.isInterface()等等,能用来获得很多信息

RTTI与反射在最底层的思想上是很类似的,本质的区别在于:对RRTI,编译器在编译时打开和检查.class文件,而对反射来说,.class文件在编译时是不可获取的,在运行时未知对象已经来了再去打开和检查.class文件

反射机制使得java能够创建一个在编译时完全未知的对象。反射在Java中用来支持其他特性的,例如对象的序列化和JavaBean

Class对象

Class对象是进行反射操作的入口,所以首先必须获得Class对象。除了通过实例获取外,Class对象主要由以下几种方法获得:

通过类加载器加载class文件

Class clazz = Thread.currentThread().getContextClassLoader().
        loadClass("com.takumiCX.reflect.ClassTest");

通过静态方法Class.forName()获取,需要传入类的全限定名字符串作参数(在获得class对象的同时会引起类的初始化;如果指定参数initialize为false时,也不会触发类初始化,其实这个参数是告诉虚拟机,是否要对类进行初始化)

Class clazz = Class.forName("com.takumiCX.reflect.ClassTest");

通过类.class获得类的Class对象

Class clazz = ClassTest.class;
Spring IOC反射机制

找到并加装配置

解析配置文件中的bean元素,并识别id和class

通过反射(Class.forName().newInstance())创建这个bean的实例

将id作为key、实例作为value存放进Spring容器中

getBean取出实例

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/73236.html

相关文章

  • Java入门请不要放弃,学习路线以及侧重点分析

    摘要:而面向搜索引擎,就是我们要及时的使用百度谷歌遇到问题无法解决,先别急着放弃,可以去网络寻找答案,你的坑大部分别人都已经走过了,大部分都可以找到合适的解决方案。 showImg(https://segmentfault.com/img/remote/1460000019236352?w=866&h=456); 前言: ●众多的语言,到底哪一门才是适合我的?●我们为什么要学习Java语言呢...

    mochixuan 评论0 收藏0
  • JAVA笔记 - 收藏集 - 掘金

    摘要:动态代理个经纪人如何代理个明星掘金在代理模式女朋友这么漂亮,你缺经纪人吗中我们用宝强的例子介绍了静态代理模式的概念。掘金使用从头创建一个,这种方法比较简单。 动态代理:1 个经纪人如何代理 N 个明星 - Android - 掘金在 代理模式:女朋友这么漂亮,你缺经纪人吗? 中我们用宝强的例子介绍了静态代理模式的概念。 本来我的目的是通过大家耳熟能详的例子来加深理解,但是有些网友指责...

    kamushin233 评论0 收藏0
  • 笔记 - 收藏集 - 掘金

    摘要:目录如何用提高效率后端掘金经常有人说我应该学一门语言,比如之类,但是却不知道如何入门。本文将通过我是如何开发公司年会抽奖系统的后端掘金需求出现年会将近,而年会抽奖环节必不可少,但是抽奖系统却还没有。 云盘一个个倒下怎么办?无需编码,手把手教你搭建至尊私享云盘 - 工具资源 - 掘金微盘挂了,360倒了,百度云盘也立了Flag。能让我们在云端储存分享文件的服务越来越少了。 买一堆移动硬盘...

    Alex 评论0 收藏0
  • Java深入-框架技巧

    摘要:从使用到原理学习线程池关于线程池的使用,及原理分析分析角度新颖面向切面编程的基本用法基于注解的实现在软件开发中,分散于应用中多出的功能被称为横切关注点如事务安全缓存等。 Java 程序媛手把手教你设计模式中的撩妹神技 -- 上篇 遇一人白首,择一城终老,是多么美好的人生境界,她和他历经风雨慢慢变老,回首走过的点点滴滴,依然清楚的记得当初爱情萌芽的模样…… Java 进阶面试问题列表 -...

    chengtao1633 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<