转:java 反射面试总结

反射的原理是什么

关键考点:
 什么是反射机制
 反射机制的作用是什么

【答案】
反射是为了能够动态地加载一个类,动态地调用一个方法,动态地访问一个属性等动态要求而设计的。它的出发点就在于JVM会为每个类创建一个java.lang.Class类的实例,通过该对象可以获取这个类的信息,然后通过使用java.lang.reflect包下的API以达到各种动态需求。

Class类的含义和作用是什么

关键考点:
 Class类的含义
 如何获取Class对象

【答案】
每一个Class类的对象就代表了一种被加载进入JVM的类,它代表了该类的一种信息映射。开发者可以通过以下3种途径获取到Class对象。

Class类的forName()方法的返回值。
访问所有类都会拥有的静态的class属性。
调用所有对象都会有的getClass()方法。

在Class类中,定义许多关于类信息的方法。例如,getName()、getMethod()、getConstructor()和newInstance()等可以用于反射开发,还有isInstance()和isInterface()等一些关于类的功能方法。

如何操作类的成员变量

关键考点:
 Field的含义
 Field类的常用方法。

【答案】
Field提供有关类或接口的单个静态或实例字段的信息,它通过Class类的getDeclaredField()或getDeclaredFields()方法获取到,再置于java.lang.reflect包下。Field的方法主要分为两大类,即getXXX和setXXX,她们都需要提供相应的实例对象,setXXX还需要提供需要设置的值。

如何操作类的方法(Method)

关键考点:
 Method的含义
 Method类的常用方法

【答案】
Method提供关于类或接口中的某个方法(以及如何访问该方法)的信息,包括了静态方法额成员方法(包括抽象方法在内)。它通过Class类的getMethod()或getMethods()方法获取到,该类定义在java.lang.reflect包下。Method类的最常用的方法是invoke(),正是通过它来完成方法被动态调用的目的。

如何利用反射实例化一个类

关键考点:
 Class类的newInstance()方法的使用
 Constructor类的使用

【答案】
根据调用构造方法的不同,用反射机制来实例化一个类,可以有两种途径。如果使用无参数的构造方法,则直接使用Class类的newInstance()方法即可。若需要使用特定的构造方法创建对象,则需要先获取Contructor实例,再用newIntance()方法创建对象。

如何利用反射机制来访问一个类的私有成员

关键考点:
 反射API的使用
 如何获得私有成员的实例

【答案】
在使用反射机制访问私有成员的时候,他们的可访问性是为false的。需要调用setAccessible(true)方法,把原本不可访问的私有成员变为可以访问以后,才能进行成功的访问或调用。

如何利用反射来覆盖数据对象的toString()方法

关键考点:
 Field的使用

【答案】
对于数据类型的类的toString()方法,覆盖它的基本思路,主要有以下几点:

通过getDeclaredFields()方法得到所有的Field对象。
把上一步得到的Field对象数组进行遍历。
每一次循环加上字段名和字段值。
返回循环叠加以后的字符串结果。

作者:wardjar
来源:CSDN
原文:https://blog.csdn.net/weixin_40254133/article/details/82986278
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/weixin_44333359/article/details/88748642