一文搞懂Java反射机制面试题,面试不再怕!
在Java开发面试里,反射机制可是热门考点。今天咱们就深挖一下相关面试题,让你面试时心里有底。
一、啥是Java反射机制?

面试常被问啥是反射。简单讲,反射让Java程序在运行时能获取自身信息,像类的方法、属性等,还能操作它们。好比你有个房子(类),平时只能从大门(常规方法)进出,但通过反射,就能在运行时找到房子每个角落,甚至随意改动布局(操作类成员)。
比如通过Class.forName("类的全限定名")
就能获取到类的Class
对象,然后利用这个对象得到类的各种信息。像Class
对象的getMethods()
方法可以拿到类的所有公共方法。
二、反射机制有啥用?
面试官接着可能问反射有啥用。用处可不少。像框架开发,Spring框架就靠反射来创建和管理Bean。通过配置文件或注解,Spring利用反射在运行时动态创建对象、调用方法。比如在Spring配置文件里定义一个Bean,Spring就通过反射创建这个Bean实例。
还有动态代理,Java动态代理用反射生成代理类,在不修改目标类代码前提下,给目标类添加功能,像日志记录、事务管理。反射能让程序更灵活,运行时根据条件加载不同类、调用不同方法。
三、反射机制的优缺点是啥?
问到优缺点,先说优点,除了上面提到的灵活性,反射还能增强代码扩展性。例如开发插件系统,通过反射加载不同插件类,无需修改主程序代码就能添加新功能。
但缺点也明显。首先性能差,反射操作比直接调用方法慢很多,因为反射要解析字节码获取信息,再调用方法。其次,破坏封装性,反射能访问类的私有成员,违背面向对象封装原则,要是用错,程序容易出问题,维护也难。
四、反射中如何获取类的构造函数并实例化对象?
这也是常问的。获取构造函数并实例化对象,先拿到Class
对象,然后用getConstructor(参数类型列表)
获取公共构造函数,getDeclaredConstructor(参数类型列表)
获取包括私有在内所有构造函数。
比如:
try {
Class<?> clazz = Class.forName("com.example.MyClass");
Constructor<?> constructor = clazz.getConstructor();
Object obj = constructor.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
要是构造函数有参数,就在getConstructor
和newInstance
里传入对应参数类型和值。
五、反射在实际开发中的应用场景还有哪些?
除了框架开发和动态代理,单元测试框架也常用反射。比如JUnit框架,通过反射调用测试类里的测试方法。还有对象关系映射(ORM)框架,像Hibernate,利用反射将Java对象和数据库表映射,根据类结构生成SQL语句。
了解这些Java反射机制面试题,你对反射理解更透彻,面试时就能自信应答,拿下心仪工作。
还没有评论,来说两句吧...