主题
java 反射面试题
一、什么是反射?
Java 反射机制是在运行状态中,对于任意一个类,都能知道这个类的所以属性和方法;对于任何一个对象,都能够调用它的任何一个方法和属性;这样动态获取新的以及动态调用对象方法的功能就叫做反射。 简单来说反射就是解剖一个类,然后获取这个类中的属性和方法,前提是要获取这个类的 Class 对象 在 java 中给我们提供了几个这几个类用于描述编译后的各种对象
| 类 | 描述 |
|---|---|
| java.lang.Class | 描述编译后的 class 文件的对象 |
| java.lang.reflect.Constructor | 用于描述构造方法 |
| java.lang.reflect.Field | 描述字段(成员变量) |
| java.lang.reflect.Method | 描述成员方法 |
二、java 反射的作用
需要访问隐藏属性或者调用方法改变程序原来的逻辑,这个在开发中很常见的,由于一些原因,系统并没有开放一些接口出来,这个时候利用反射是一个有效的解决方法 自定义注解,注解就是在运行时利用反射机制来获取的。
三、反射的实现方式
1.通过 new 对象实现反射机制 2.通过路径实现反射机制 3.通过类名实现反射机制
java
public class Get {
//获取反射机制三种方式
public static void main(String[] args) throws ClassNotFoundException {
//方式一(通过建立对象)
Student stu = new Student();
Class classobj1 = stu.getClass();
System.out.println(classobj1.getName());
//方式二(所在通过路径-相对路径)
Class classobj2 = Class.forName("fanshe.Student");
System.out.println(classobj2.getName());
//方式三(通过类名)
Class classobj3 = Student.class;
System.out.println(classobj3.getName());
}
}四、反射机制的优缺点
优点:
运行期类型的判断,动态类加载,动态代理使用反射。
缺点:
性能是一个问题,反射相当于一系列解释操作,通知 jvm 要做的事情,性能比直接的 java 代码要慢很多。
五、反射的使用场景
1、可以用于改进设计模式 2、反射机制的典型应用--tomcat 服务器(Tomcat 通过预先设置好的 Java 反射处理机制解析字节码文件并创建相应的实例对象。之后调用所需要的方法。) 3、Spring 的 AOP 和 IOC 都是基于反射实现的 4、例如:拦截器,注解、XML 文档、token 登录拦截等等。