Java面试必问:反射和对象拷贝,简单易懂版
1. 反射(Reflection)—— Java的"照妖镜"
反射就像是Java的"照妖镜",它能在程序运行时动态地查看和操作类、方法、属性等信息,而不需要在代码里写死。
(1)反射能干啥?
- 运行时获取类的信息(比如类名、方法、属性)
- 动态创建对象(即使类名是运行时才知道的)
- 调用私有方法(突破访问限制)
- 框架底层实现(比如Spring、Hibernate都用反射)
(2)怎么用反射?
java
复制
下载
// 1. 获取Class对象(三种方式)
Class<?> clazz = Class.forName("com.example.User"); // 最常用
Class<?> clazz = User.class; // 直接.class
Class<?> clazz = userObj.getClass(); // 从对象获取
// 2. 创建对象
Object user = clazz.newInstance(); // 调用无参构造方法
// 3. 获取方法并调用
Method setNameMethod = clazz.getMethod("setName", String.class);
setNameMethod.invoke(user, "张三"); // 相当于 user.setName("张三")
(3)反射的优缺点
✅ 优点:灵活,能动态加载类、突破封装限制
❌ 缺点:性能较差(比直接调用慢),代码可读性降低