Java 中的反射和 new 的区别是什么?(附示例代码)

更新时间 2023-04-04 09:53:32

在 Java 中,反射和 new 都可以用于创建对象,但它们的实现机制不同。具体区别如下:

  1. new 关键字是在编译期确定的,它会在堆内存中为对象分配内存并进行初始化。而反射是在运行时动态地获取类信息并进行操作,它可以在程序运行期间加载、检查和修改类。
  2. 使用 new 创建对象时,需要明确对象的类型,而使用反射创建对象时,可以在运行时动态地获取类的信息并创建对象,不需要在编译期间确定类的类型。

下面是一个示例代码,演示了通过 new 和反射分别创建对象的过程:

public class MyClass {
    private int num;
    private String str;

    public MyClass(int num, String str) {
        this.num = num;
        this.str = str;
    }

    public void print() {
        System.out.println("num: " + num + ", str: " + str);
    }
}

public class Main {
    public static void main(String[] args) throws Exception {
        // 使用 new 创建对象
        MyClass obj1 = new MyClass(1, "hello");
        obj1.print();

        // 使用反射创建对象
        Class<MyClass> clazz = MyClass.class;
        Constructor<MyClass> constructor = clazz.getConstructor(int.class, String.class);
        MyClass obj2 = constructor.newInstance(2, "world");
        obj2.print();
    }
}

在上面的示例代码中,首先使用 new 关键字创建了一个 MyClass 的对象 obj1,然后调用了 print 方法输出了对象的属性值。

接着,使用反射机制创建了一个 MyClass 的对象 obj2,首先通过 MyClass.class 获取 MyClassClass 对象,然后通过 getConstructor 方法获取指定的构造方法,并通过 newInstance 方法创建了一个新的对象。最后调用了 print 方法输出了对象的属性值。