【Java面试题第七期】一文回答面试中常见反射问题?

java反射的作用

反射机制是在运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意个对象,都能够调用它的任意一个方法。在java中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。

1)在运行时判断任意一个对象所属的类。

2)在运行时构造任意一个类的对象。

3)在运行时判断任意一个类所具有的成员变量和方法。

4)在运行时调用任意一个对象的方法。

实现Java反射的类

1)Class:表示正在运行的Java应用程序中的类和接口。

注意: 所有获取对象的信息都需要Class类来实现。

2)Field:提供有关类和接口的属性信息,以及对它的动态访问权限。

3)Constructor:提供关于类的单个构造方法的信息以及它的访问权限。

4)Method:提供类或接口中某个方法的信息。

java反射机制

可以在运行时判断⼀个对象所属的类,构造⼀个类的对象,判断类具有的成员变量和方法,调用1个对象的方法。

4个关键的类:Class,Constructor,Field,Method。 getConstructor获得构造函数/getDeclardConstructor;

getField/getFields/getDeclardFields获得类所生命的所有字段;

getMethod/getMethods/getDeclardMethod获得类声明的所有方法,正常方法是⼀个类创建对象,而反射是1个对象找到1个类。

如何通过反射获取和设置对象私有字段的值?

可以通过类对象的 getDeclaredField()方法字段(Field)对象,然后再通过字段对象的 setAccessible(true)将其设置为可以访问,接下来就可以通过get/set 方法来获取/设置字段的值了。

如何通过反射创建对象?

方法 1:通过类对象调用 newInstance()方法,例如:     String.class.newInstance()

方法 2:通过类对象的 getConstructor()或   getDeclaredConstructor()方法获得构造器(Constructor)对象并调用其newInstance()方法创建对象,例如:String.class.getConstructor(String.class).newInstance(“Hello”);

反射机制的优缺点

优点:

1)能够运行时动态获取类的实例,提高灵活性;

2)与动态编译结合;

缺点:

1)使用反射性能较低,需要解析字节码,将内存中的对象进行解析。

解决方案:

1、通过setAccessible(true)关闭JDK的安全检查来提升反射速度;

2、多次创建一个类的实例时,有缓存会快很多;

3、ReflflectASM工具类,通过字节码生成的方式加快反射速度;

反射机制的应用场景有哪些?

反射是框架设计的灵魂。

在我们平时的项目开发过程中,基本上很少会直接使用到反射机制,但这不能说明反射机制没有用,实际上有很多设计、开发都与反射机制有关,例如模块化的开发,通过反射去调用对应的字节码;动态代理设计模式也采用了反射机制,还有我们日常使用的 Spring/Hibernate 等框架也大量使用到了反射机制。

举例:

①我们在使用JDBC连接数据库时使用Class.forName()通过反射加载数据库的驱动程序;

②Spring框架也用到很多反射机制,最经典的就是xml的配置模式。Spring 通过XML 配置模式装载Bean 的过程:

1) 将程序内所有 XML 或 Properties 配置文件加载入内存中;

2)Java类里面解析xml或properties里面的内容,得到对应实体类的字节码字符串以及相关的属性信息;

3)使用反射机制,根据这个字符串获得某个类的Class实例;

4)动态配置实例的属性;

小程序:IT面试题练习

(0)

相关推荐

  • 吊打面试官系列:说说反射的用途及实现?

    反射是什么? 反射是Java程序开发语言的特征之一,它允许动态地发现和绑定类.方法.字段,以及所有其他的由于有所产生的的元素.通过反射,能够在需要时完成创建实例.调用方法和访问字段的工作. 反射机制主 ...

  • java中的反射机制

    前言: ​相信很多人都知道反射可以说是Java中最强大的技术了,它可以做的事情太多太多,很多优秀的开源框架都是通过反射完成的,比如最初的很多注解框架,后来因为java反射影响性能,所以被运行时注解AP ...

  • 【Java面试题第八期】不会还有人不懂Java最基本的异常处理原理吧?

    Java使用面向对象的方式来处理异常,它把程序中发生的每个异常也都分别封装到一个对象来表示的,该对象中包含有异常的信息. Java对异常进行了分类,不同类型的异常分别用不同的 Java 类表示,所有异 ...

  • 【Java面试题第六期】你对注解了解多少?

    首先注解是什么? Annotation(注解)是 Java 提供的一种对元程序中元素关联信息和元数据(metadata)的途径和方法. Annatation(注解)是一个接口,程序可以通过反射来获取指 ...

  • 【Java面试题第五期】Java中垃圾收集算法有哪些?

    GC这块也是面试的重点,面试长问,实际上如果只一般公司的面试涉及的并不深,最基本的算法还是要了解的,几种收集算法都比较简单,相信大家都知道,这里个大家简单的回顾下. 标记-清除 这是垃圾收集算法中最基 ...

  • 【Java面试题第四期】使用过哪些JDK命令?

    我们平时使用idea开发,并且项目都是部署到像Tomcat容器上的,所以很少用到JDK自带的一些命令,实际上JDK提供了很多命名用来查看Java程序在运行时的一些信息,这里说一些简单常见的,有兴趣的可 ...

  • 软文营销推广中常见的宣传内容有哪些?

    真正的软文营销要有全方位的规划:宣传内容.稿件划分.宣传顺序.发布途径等等,每一个环节都不容忽视,内容方面,首先要保证所有文章合起来能将所有信息表达完整.顺序上,要使宣传有起有伏,能带动观众的兴趣.而 ...

  • 【深圳诗歌】No.81299期A版||​年近七十有感 文/仲绍文

    欢迎阅读 深 圳 诗 歌 <深圳诗歌>平台旨在打造华语文学的精神新高地!我们从杂录的角度编发作家老师朋友们的作品,诗歌散文小说等全部文体我们都可以收录.仿古体我们也收录,读者朋友们可以领略 ...

  • 【第七期】校园文NO.1

    最美好的青春岁月,最动人的爱情故事! %爱兜书单 &现代言情 1.  <再让我欺负一下下>作者:女王不在家 2.  <觊觎公主姐姐>作者:读读 3.  <跟你说句 ...

  • 【Java面试题第一期】有没有jvm调优经验?调优方案有哪些?

    【Java面试题第一期】有没有jvm调优经验?调优方案有哪些?

  • 无痕文尘‖看图写诗第七期 有时候离去 也是一次重生

    无痕文尘新诗社 第7期看图写诗选题 : 出题老师:时间的玫瑰 投稿体裁:自由诗 第七期看图写诗作者目录: 1.江涛  2.胡彬  3.崔万林 4.江涛  5.王超  6.王超 7.崔万林  8.时间的 ...