1 protected native Object clone () throws Clonenotsupportedexception;
1. The method is modified by native keyword
The native keyword in Java indicates that this method is a local method, "Java native description." Moreover, the native modified method performs more efficiently than native .
2. The method is modified by protected
When a class overrides the Clone () method, it needs to be modified to the public access modifier, so that all other classes can access this method of the class.
3. Method throws clonenotsupportedexception exception
A class wants to overwrite the Clone () method and must implement the java.lang.Cloneable interface itself, otherwise it throws a clonenotsupportedexception exception.
Second, the role of Clone ()
Note: Our objects here refer specifically to complex types.
1, simple = operation
We know that objects of complex types in Java are reference types, and they tend to have memory addresses for objects. So we can't simply assign operations by using the = operator. We assign an object A to another object B, and we just assign the memory address of object A to B so that both objects are pointing to the same memory address. As a result, modifications to one of the objects will affect the other object. The following figure indicates:
person P1 = new person ();
person P2 = p1;
2, Clone ()
Using the Clone () method, you can quickly create a copy of an object, and two objects point to a different memory address. The following figure indicates:
person P1 = new person ();
person P2 = P1.clone ();
Iii. Shallow clone and deep clone1, shallow clone (shallow copy)
Shallow clone refers to only the clone object itself, not the fields in the Clone object. Only call Super.clone (), just shallow clone. Although the object after the copy points to a different memory address, the field inside the object still points to the same memory address as the previous object.
public class Shallowclone implements cloneable {public
String name;
public int age;
public by person;
Public Shallowclone () {
} public
Shallowclone (String name, int age, person person) {
this.name = name;
This.age = age;
This.person = person;
}
@Override Public
Shallowclone Clone () {
shallowclone c = null;
try {
c = (shallowclone) super.clone ();
return c;
} catch (Clonenotsupportedexception e) {
e.printstacktrace ();
}
return c;
}
public static void Main (string[] args) {person
p = new Person ();
P.name = "P";
P.age = ten;
Shallowclone C1 = new Shallowclone ("Jim", p);
System.out.printf ("Before clone:c1 =%s, C1.person =%s\n", C1, C1.person);
Shallowclone C2 = C1.clone ();
System.out.printf ("After clone:c2 =%s, C2.person =%s\n", c2, C2.person);
}
Run main () output:
Before clone:c1 = cre.sample.test.object.shallowclone@558385e3, C1.person = Cre.sample.test.person@2dcb25f1
After clone:c2 = cre.sample.test.object.shallowclone@742808b3, C2.person = cre.sample.test.person@2dcb25f1
Description shallow copy, Shallowclone object memory address changed, but the person field memory address in the object has not changed;
2, Deep clone (deep copy)
Deep clone refers to the fields within the Clone object itself, as well as the clones.
/** * Deep Clone code example * Created by Cregu on 2016/6/9.
*/public class Deepclone implements cloneable {public String name;
public int age;
public by person;
Public Deepclone () {} public Deepclone (String name, int age, person person) {this.name = name;
This.age = age;
This.person = person;
@Override public Deepclone Clone () {Deepclone c = null;
try {c = (Deepclone) super.clone ();
C.person = Person.clone ();
return C;
catch (Clonenotsupportedexception e) {e.printstacktrace ();
return C;
public static void Main (string[] args) {person p = new person ();
P.name = "P";
P.age = 10;
Deepclone C1 = new Deepclone ("Jim", p);
System.out.printf ("Before clone:c1 =%s, C1.person =%s\n", C1, C1.person);
Deepclone C2 = C1.clone ();
System.out.printf ("After clone:c2 =%s, C2.person =%s\n", c2, C2.person); }
}
Run main () output:
Before clone:c1 = cre.sample.test.object.deepclone@558385e3, C1.person = cre.sample.test.person@2dcb25f1 after
CLONE:C2 = cre.sample.test.object.deepclone@742808b3, C2.person = cre.sample.test.person@70535b58
Description deep copy, Deepclone object memory address changed, but the person field memory address in the object also changed.
The above text of the Java Object Clone method comprehensive analysis is small to share all the content of everyone, hope to give you a reference, but also hope that we support cloud habitat community.