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()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。