我们如何在Java中复制对象?

在Java中,您可以通过多种方式复制对象,其中最常用的是复制构造函数和clone方法。

使用复制构造函数

通常,复制构造函数是通过使用先前已创建的相同类的对象初始化对象来创建对象的构造函数。Java确实支持副本构造函数,但是您需要自己定义它们。

示例

在下面的Java示例中,我们有一个带有两个实例变量名称和年龄的类,以及一个初始化这些变量的参数化构造函数。

然后,我们有另一个构造函数,该构造函数接受当前类的对象,并使用该对象的变量初始化实例变量。

如果使用第二个构造函数通过将一个对象传递给该实例来实例化此类,则将生成一个对象,该对象是您作为参数传递的对象的副本。

import java.util.Scanner;
public class Student {
   private String name;
   private int age;
   public Student(String name, int age){
      this.name = name;
      this.age = age;
   }
   public Student(Student std){
      this.name = std.name;
      this.age = std.age;
   }
   public void displayData(){
      System.out.println("Name : "+this.name);
      System.out.println("Age : "+this.age);
   }
   public static void main(String[] args) {
      Scanner sc =new Scanner(System.in);
      System.out.println("Enter your name ");
      String name = sc.next();
      System.out.println("Enter your age ");
      int age = sc.nextInt();
      Student std = new Student(name, age);
      System.out.println("Contents of the original object");
      std.displayData();
      System.out.println("Contents of the copied object");
      Student copyOfStd = new Student(std);
      copyOfStd.displayData();
   }
}

输出结果

Enter your name
Krishna
Enter your age
20
Contents of the original object
Name : Krishna
Age : 20
Contents of the copied object
Name : Krishna
Age : 20

使用克隆方法

java.lang.Objectclone()方法接受一个对象作为参数,创建并返回它的副本。

示例

在下面的Java示例中,我们有一个带有两个实例变量名称和年龄的类,以及一个初始化这些变量的参数化构造函数。

从main方法中,我们正在创建此类的对象,并使用该clone()方法生成其副本。

import java.util.Scanner;
public class CloneExample implements Cloneable {
   private String name;
   private int age;
   public CloneExample(String name, int age){
      this.name = name;
      this.age = age;
   }
   public void displayData(){
      System.out.println("Name : "+this.name);
      System.out.println("Age : "+this.age);
   }
   public static void main(String[] args) throws CloneNotSupportedException {
      Scanner sc =new Scanner(System.in);
      System.out.println("Enter your name ");
      String name = sc.next();
      System.out.println("Enter your age ");
      int age = sc.nextInt();
      CloneExample std = new CloneExample(name, age);
      System.out.println("Contents of the original object");
      std.displayData();
      System.out.println("Contents of the copied object");
      CloneExample copiedStd = (CloneExample) std.clone();
      copiedStd.displayData();
   }
}

输出结果

Enter your name
Krishna
Enter your age
20
Contents of the original object
Name : Krishna
Age : 20
Contents of the copied object
Name : Krishna
Age : 20