了解Java中的可克隆接口
生活随笔
收集整理的這篇文章主要介紹了
了解Java中的可克隆接口
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
什么是對象克隆?
對象克隆是生成具有不同名稱的對象的精確字段到字段副本的過程。 克隆的對象在內存中有自己的空間,可在其中復制原始對象的內容。 這就是為什么在克隆后更改原始對象的內容時,所做的更改不會反映在克隆對象中的原因。
我們可以在Java中克隆任何對象嗎?
不,我們不能。 當我們嘗試直接克隆未實現名為'Cloneable'的標記接口的對象實例時,將導致一個名為CloneNotSupportedException的異常。 因此,為了允許克隆對象實例,相應的對象類必須實現Cloneable接口。 例如 -
public class Employee {private String name;public Employee(String name) {this.name = name;}public String getName() {return name;}public static void main(String[] args) {Employee emp = new Employee("Abhi");try {Employee emp2 = (Employee) emp.clone();System.out.println(emp2.getName());} catch (CloneNotSupportedException e) {e.printStackTrace();}} }上面的代碼在執行時會引發異常,例如–
java.lang.CloneNotSupportedException: Employeeat java.base/java.lang.Object.clone(Native Method)at Employee.main(Employee.java:16)請注意,Cloneable是標記接口 ,這意味著它沒有任何克隆方法規范。 在上面的代碼片段中,實現Cloneable只是向JVM指示可以克隆Employee類實例,并且Object類的clone方法對于Employee類而言是合法的。
下面是如何正確克隆Employee類實例以及如何在Employee類中覆蓋Object的clone方法的方法。
public class Employee implements Cloneable {private String name;public Employee(String name) {this.name = name;}public String getName() {return name;}public Object clone()throws CloneNotSupportedException{ return (Employee)super.clone(); }public static void main(String[] args) {Employee emp = new Employee("Abhi");try {Employee emp2 = (Employee) emp.clone();System.out.println(emp2.getName());} catch (CloneNotSupportedException e) {e.printStackTrace();}} }其他標記接口是Serializable , Cloneable和Remote接口。
翻譯自: https://www.javacodegeeks.com/2018/03/understanding-cloneable-interface-in-java.html
總結
以上是生活随笔為你收集整理的了解Java中的可克隆接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: static和瞬态_具有瞬态属性的视图对
- 下一篇: apache.camel_Apache