Bản sao đối tượng Java ()

Phương thức Java Object clone () tạo một bản sao nông của đối tượng.

Ở đây, bản sao cạn có nghĩa là nó tạo một đối tượng mới và sao chép tất cả các trường và phương thức được liên kết với đối tượng.

Cú pháp của clone()phương thức là:

 object.clone()

tham số clone ()

Các clone()phương pháp không mất bất kỳ thông số.

clone () Trả lại giá trị

  • trả về bản sao của đối tượng
  • ném CloneNotSupportedExceptionnếu lớp của đối tượng không triển khai Cloneablegiao diện

Lưu ý : Cả Objectlớp không thực hiện Cloneable. Do đó, chúng ta không thể gọi clone()phương thức cho đối tượng của Objectlớp.

Ví dụ 1: Java clone ()

 class Main implements Cloneable ( // declare variables String name; int version; public static void main(String() args) ( // create an object of Main class Main obj1 = new Main(); // initialize name and version using obj1 obj1.name = "Java"; obj1.version = 14; // print variable System.out.println(obj1.name); // Java System.out.println(obj1.version); // 14 try ( // create clone of obj1 Main obj2 = (Main)obj1.clone(); // print the variables using obj2 System.out.println(obj2.name); // Java System.out.println(obj2.version); // 14 ) catch (Exception e) ( System.out.println(e); ) ) )

Trong ví dụ trên, chúng ta đã tạo một lớp có tên là Main. Lớp bao gồm hai trường tên và phiên bản. Ở đây, chúng ta đã khởi tạo các trường lớp bằng cách sử dụng đối tượng obj1 của lớp.

Lưu ý dòng,

 Main obj2 = (Main)obj1.clone();

Ở đây, chúng tôi đã sử dụng clone()phương thức để tạo bản sao của obj1. Giá trị được trả về clone()được gán cho đối tượng obj2. Vì giá trị trả về của clone()Objectkiểu, chúng tôi đã sử dụng (Main)để chuyển đổi nó thành kiểu Chính.

Bây giờ tên và phiên bản của trường có thể được truy cập bằng cách sử dụng đối tượng obj2. Tuy nhiên, nếu chúng tôi thay đổi giá trị của các trường bằng cách sử dụng obj2, thì giá trị được liên kết với obj1 sẽ không bị thay đổi.

Ví dụ 2: Thay đổi giá trị bằng cách sử dụng đối tượng nhân bản

 class Main implements Cloneable ( // declare variables String name; int version; public static void main(String() args) ( // create an object of Main class Main obj1 = new Main(); // initialize name and version using obj1 obj1.name = "Java"; obj1.version = 14; // print variable System.out.println(obj1.name); // Java System.out.println(obj1.version); // 14 try ( // create a clone of obj1 Main obj2 = (Main)obj1.clone(); // print the variables using obj2 System.out.println(obj2.name); // Java System.out.println(obj2.version); // 14 // changing value of name // using obj2 obj2.name = "Python"; System.out.println(obj2.name); // Python // check if value associated // with obj1 is changed System.out.println(obj1.name); // Java ) catch (Exception e) ( System.out.println(e); ) ) )

Lưu ý dòng,

 obj2.name = "Python";

Ở đây, chúng tôi đã thay đổi giá trị của biến bằng cách sử dụng obj2. Bây giờ khi chúng ta in tên biến cho cả obj1 và obj2, chúng ta có thể thấy rằng giá trị của obj1 không thay đổi. Đó là bởi vì clone()phương pháp tạo ra bản sao nông của các đối tượng.

Để tìm hiểu thêm về bản sao cạn, hãy truy cập Bản sao nông trong Java là gì?

Chúng tôi đã bao gồm clone()phương thức bên trong khối try… catch của Java. Đó là bởi vì lớp con có thể ném ra ngoại lệ nếu đối tượng không thể được nhân bản.

Lưu ý : ObjectLớp là lớp cha cho tất cả các lớp trong Java. Do đó, mọi lớp và mảng đều có thể triển khai clone()phương thức.

thú vị bài viết...