.

new创建新对象

最简单的创建对象的方法

Dag dag1 = new Dag({age : 1, colour:'red'});

通过反射机制

当你说"进行时的对象创建",我理解为根据用户输入的类名动态创建对象。以下是一个简单的 Java 示例,演示如何通过反射根据用户输入的类名动态创建对象:

注:当类不存在或者类存在但没有构造函数的时候,这种情况就会报错

import java.lang.reflect.Constructor;
import java.util.Scanner;

public class DynamicObjectCreation {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入类名: ");
        String className = scanner.nextLine();

        try {
            // 使用反射加载类
            Class<?> clazz = Class.forName(className);

            // 获取类的默认构造函数
            Constructor<?> constructor = clazz.getDeclaredConstructor();

            // 创建对象
            Object object = constructor.newInstance();

            // 输出对象信息
            System.out.println("成功创建了一个 " + className + " 类的对象: " + object);

        } catch (ClassNotFoundException e) {
            System.out.println("找不到指定的类: " + className);
        } catch (NoSuchMethodException e) {
            System.out.println("指定的类没有默认构造函数: " + className);
        } catch (Exception e) {
            System.out.println("创建对象时出现异常: " + e.getMessage());
        } finally {
            scanner.close();
        }
    }
}

采用Clone机制

先来提一个问题,有前面的创建对象的方案后,为什么需要Clone方案?

  1. 原型模式(Prototype Pattern): 在某些情况下,如果需要创建大量相似的对象,并且这些对象的初始化代价较高,那么使用克隆来创建对象可以节省时间和资源。通过克隆已有对象,可以避免重复执行初始化操作。
  2. 不可变对象(Immutable Objects): 如果对象是不可变的,即对象的状态不会发生改变,那么克隆可以避免因为对象共享导致的状态变化问题。克隆创建的对象是独立的,不受原始对象的影响。
  3. 避免构造函数复杂性: 有时候对象的构造函数可能比较复杂,包括大量的初始化步骤、依赖注入等。如果对象的构造函数过于复杂,可以考虑使用克隆来创建对象,避免重复的初始化过程。
  4. 子类对象创建: 如果对象是子类的实例,而不是具体的实现类,那么在某些情况下,克隆可以更灵活地创建对象,因为它会复制原对象的实现细节。

下面是实现一个浅拷贝Clone的实例

public class MyClass implements Cloneable {
    private int value;

    public MyClass(int value) {
        this.value = value;
    }

    // 重写 clone 方法
    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone(); // 浅拷贝
    }

    public static void main(String[] args) {
        MyClass original = new MyClass(10);

        try {
            // 创建对象的克隆
            MyClass clone = (MyClass) original.clone();

            // 输出克隆对象的值
            System.out.println("克隆对象的值: " + clone.value);
        } catch (CloneNotSupportedException e) {
            System.out.println("克隆失败: " + e.getMessage());
        }
    }
}