Java 基础面试题 III 反射

发布时间:2023-06-15 08:30

[toc]

Java 基础面试题 III 反射_第1张图片

基础面试题-反射

1、什么是反射

主要是指程序可以访问、检测和修改它本身状态的一种行为,反射就是把 java 类中的各个成分映射为一个个对象,一个类里有:成员变量、方法、构造方法、包等信息。

Java 反射是 Java 被视为动态语言的一个关键性质,这个机制允许程序在运行时透过 Relfection APIs 取得任何一个已知名称 class 的内部信息,包括 modifiers (诸如 publicstatic 等)、superclass(例如 Object),实现 interfaces(例如 Cloneable)也包括 fiedlsmethods 的所有信息,并可以改变 fields内容或唤起 methods

在静态语言中,使用一个变量,必须知道他的存在,Java 中,变量的类型信息在编译时都保存到 class 文件中,这样在运行时才能保证准确无误,换句话说,程序在运行时都是固定的,如果这个时候想改变,就需要反射这个东西了。

实现 Java 发射机制的类都位于 java.lang.relfect 包中

  1. Class类:代表一个类
  2. Field类:代表类的成员变量(类的属性)
  3. Method类:代表类的方法
  4. Constructor类:代表类的构造方法
  5. Array类:提供了动态创建数组,以及访问数组的元素的静态方法

一句话概括就是使用反射可以赋予 jvm 动态编译的能力,否则类的元数据信息只能用今天该编译的方式实现,例如热加载,Tomcatclassloader 都无法支持

快速通道:什么是反射,Java反射是什么

地址:https://baijiahao.baidu.com/s...

### 2、反射机制的优缺点

优点:

  1. 反射机制极大的提高了程序的灵活性和扩展性,降低模块的耦合性,提高自身的适应能力
  2. 通过反射机制可以让程序创建和控制任何类的对象,无需提前硬编码目标类
  3. 使用反射机制能够在运行时构造一个类的对象、判断一个类所具有的成员变量和方法、调用一个对象的方法。
  4. 反射机制是构建框架技术的基础所在,使用反射可以避免将代码写死在框架中

缺点:

  1. 性能问题,反射中包含很多动态类型,Java虚拟机不能对这些动态内容进行优化,因此反射操作效果要比正常效果低很多
  2. 安全限制,反射通常需要程序在运行么有安全方面的限制,如果一个程序有安全需求,那就最好不要使用反射
  3. 程序健壮性,反射允许代码执行一些通常不被运行的操作,使用反射会导致意想不到的后果。反射代码破坏了Java程序结构的抽象性。

快速通道:Java反射的优缺点

地址:https://blog.csdn.net/hongfen...

3、如何获取反射Class

  1. 调用某个对象的 getClass 方法
People p = new People();
Class cazz = p.getClass();
  1. 调用某个 class 属性来获取对应的 Class 对象
Class clazz = People.class;
  1. 使用 Class 类中的静态方法 forName() 获取
Class clazz = Class.forName("xxx.xxx.People");

有了 class 对象,我们可以通个调用 newInstance() ,默认调用无参构造来返回一个对象

String str = (String)(Class.forName("java.lang.String").newInstance());

也可以通过 Constructor 构造器来获取对象

// 调用无参的私有构造函数
Constructor c1 = Class.forName("java.lang.String").getDeclaredConstructor();
c1.setAccessible(true);
String str1 = (String) c1.newInstance();

// 调用有参的私有构造函数
Constructor c2 = Class.forName("java.lang.String").getDeclaredConstructor(new Class[] { String.class });
c2.setAccessible(true);
String str2 = (String) c2.newInstance("hello");

快速通道:简述Java中Class类的作用

地址:https://blog.csdn.net/chongxu...

4、反射的实现方法

举例:

  • 通过 Class 对象枚举该类所有方法
  • 通过 Method.setAccessible() 绕过 Java 语言的访问权限,在其他方法中调用该私有方法
  • Spring 框架中 IOC 依赖反转基于反射机制

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号