如何在 Java 中复制对象?


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

使用复制构造函数

通常,复制构造函数是一个构造函数,它通过使用之前创建的同一类的对象来初始化对象从而创建一个对象。Java 支持复制构造函数,但您需要自己定义它们。

示例

在下面的 Java 示例中,我们有一个类,它有两个实例变量 name 和 age,以及一个参数化构造函数来初始化这些变量。

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

如果您使用第二个构造函数通过传递对象来实例化此类,则会导致一个对象,它是您作为参数传递的对象的副本。

 在线演示

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 示例中,我们有一个类,它有两个实例变量 name 和 age,以及一个参数化构造函数来初始化这些变量。

从主方法中,我们正在创建此类的对象并使用 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

更新于: 2019-07-30

8K+ 浏览量

启动你的 职业生涯

通过完成课程获得认证

开始学习
广告