如何在 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+ 瀏覽量

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告