Java Object clone() 方法創建對象的淺拷貝。
在這裏,淺拷貝意味著它創建一個新對象並複製與該對象關聯的所有字段和方法。
用法:
object.clone()
參數:
clone()
方法不接受任何參數。
clone() 返回值
- 返回對象的副本
- 如果對象的類沒有實現
Cloneable
接口,則拋出CloneNotSupportedException
注意: 這Object
類沒有實現Cloneable
.因此,我們不能稱clone()
對象的方法Object
類。
示例 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);
}
}
}
在上麵的示例中,我們創建了一個名為 Main
的類。該類包括兩個字段 name
和 version
。在這裏,我們使用類的對象obj1
初始化了類字段。
注意線,
Main obj2 = (Main)obj1.clone();
在這裏,我們使用了 clone()
方法來創建 obj1
的副本。 clone()
返回的值分配給對象 obj2
。由於clone()
的返回值為Object
類型,所以我們使用(Main)
將其轉換為Main
類型。
現在可以使用對象 obj2
訪問字段 name
和 version
。但是,如果我們使用 obj2
更改字段的值,則與 obj1
關聯的值不會更改。
示例 2:使用克隆對象更改值
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);
}
}
}
注意線,
obj2.name = "Python";
在這裏,我們使用 obj2
更改了變量的值。現在,當我們打印 obj1
和 obj2
的變量名時,我們可以看到 obj1
的值沒有改變。這是因為clone()
方法製作了對象的淺拷貝。
要了解有關淺拷貝的更多信息,請訪問What is Shallow Copy in Java?
我們在Java try...catch 塊中包含了clone()
方法。這是因為如果無法克隆對象,子類可以拋出異常。
注意: 這Object
class 是 Java 中所有類的超類。因此,每個類和數組都可以實現clone()
方法。
相關用法
- Java Object hashCode()用法及代碼示例
- Java Object finalize()用法及代碼示例
- Java Object equals(Object obj)用法及代碼示例
- Java Object toString()用法及代碼示例
- Java Object getClass()用法及代碼示例
- Java Object equals()用法及代碼示例
- Java ObjectInputStream readDouble()用法及代碼示例
- Java ObjectStreamField compareTo()用法及代碼示例
- Java ObjectInputStream readUnsignedByte()用法及代碼示例
- Java ObjectInputStream readFields()用法及代碼示例
- Java ObjectOutputStream writeFields()用法及代碼示例
- Java ObjectInputStream readFully()用法及代碼示例
- Java ObjectStreamField getName()用法及代碼示例
- Java ObjectOutputStream writeInt()用法及代碼示例
- Java ObjectInputStream readInt()用法及代碼示例
- Java ObjectStreamClass forClass()用法及代碼示例
- Java ObjectInputStream read()用法及代碼示例
- Java ObjectStreamField getOffset()用法及代碼示例
- Java ObjectStreamField getTypeCode()用法及代碼示例
- Java ObjectOutputStream writeBytes()用法及代碼示例
注:本文由純淨天空篩選整理自 Java Object clone()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。