在 Java 中,反射(Reflection)可以在运行时动态地获取类的信息并创建对象。下面从基本用法到常见方式系统说明。
Class.newInstance()(已过时)⚠️ Java 9 之后已废弃,不推荐使用
Class<?> clazz = Class.forName("com.example.User");
Object obj = clazz.newInstance(); // 调用无参构造
Constructor(推荐 ✅)Class<?> clazz = Class.forName("com.example.User");
Constructor<?> constructor = clazz.getDeclaredConstructor();
Object obj = constructor.newInstance();
Class<?> clazz = Class.forName("com.example.User");
Constructor<?> constructor =
clazz.getDeclaredConstructor(String.class, int.class);
Object obj = constructor.newInstance("Tom", 18);
Constructor<?> constructor =
clazz.getDeclaredConstructor(String.class);
constructor.setAccessible(true); // 突破访问限制
Object obj = constructor.newInstance("private");
// 1. 类名.class
Class<User> c1 = User.class;
// 2. 对象.getClass()
User user = new User();
Class<?> c2 = user.getClass();
// 3. Class.forName(最常用)
Class<?> c3 = Class.forName("com.example.User");
public class User {
private String name;
private int age;
public User() {}
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
public class Test {
public static void main(String[] args) throws Exception {
Class<?> clazz = Class.forName("User");
Constructor<?> c =
clazz.getDeclaredConstructor(String.class, int.class);
Object user = c.newInstance("Alice", 20);
System.out.println(user);
}
}
private,需 setAccessible(true)new 慢(一般业务不频繁使用)如果你愿意,我也可以:
你想深入哪一块?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。