温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎样用反射创建实例

发布时间:2026-10-04 19:10:09 来源:亿速云 阅读:96 作者:小樊 栏目:编程语言

在 Java 中,通过反射(Reflection)创建实例通常有几种常见方式,取决于你是否有构造参数、是否是私有无参构造等。


一、最常用:通过 Class.newInstance()(已过时,不推荐)

⚠️ JDK 9 之后已废弃,仅作了解

Class<?> clazz = Class.forName("com.example.Person");
Object obj = clazz.newInstance(); // 要求有无参 public 构造

二、推荐方式:使用 Constructor(最标准、最灵活)

1️⃣ 无参构造创建实例

Class<?> clazz = Class.forName("com.example.Person");
Constructor<?> constructor = clazz.getDeclaredConstructor();
Object obj = constructor.newInstance();

2️⃣ 有参构造创建实例

Class<?> clazz = Class.forName("com.example.Person");
Constructor<?> constructor =
        clazz.getDeclaredConstructor(String.class, int.class);

Object obj = constructor.newInstance("张三", 18);

三、调用私有构造方法(如单例破坏)

Constructor<?> constructor =
        clazz.getDeclaredConstructor();
constructor.setAccessible(true); // 关键
Object obj = constructor.newInstance();

四、基本流程总结

  1. 获取 Class 对象
    • Class.forName("全类名")
    • obj.getClass()
    • 类名.class
  2. 获取 Constructor
  3. 调用 newInstance()

五、常见异常

  • ClassNotFoundException:类名写错
  • NoSuchMethodException:构造方法不存在
  • IllegalAccessException:权限不足(需 setAccessible(true))
  • InstantiationException:抽象类 / 接口

六、简单示例(完整)

public class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public void say() {
        System.out.println("Hello " + name);
    }
}

public class Test {
    public static void main(String[] args) throws Exception {
        Class<?> clazz = Class.forName("Person");
        Constructor<?> c = clazz.getConstructor(String.class);
        Object p = c.newInstance("李四");
        Method m = clazz.getMethod("say");
        m.invoke(p);
    }
}

如果你是在 Spring / Android / Kotlin 或需要 泛型、工厂模式 场景,也可以告诉我,我可以给你更具体的示例。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手