學生類Student:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
package 克隆clone; /*要克隆必須實現這個借口:Cloneable,以標記這個對象可以克隆 Cloneable:此類實現了 Cloneable 接口,以指示 Object.clone() 方法可以合法地對該類實例進行按字段復制。 這個接口是標記接口,告訴我們實現該接口的類就可以實現對象的復制了。 */ public class Student implements Cloneable { private String name; private int age; public Student() { } public Student(String name, int age) { super (); this .name = name; this .age = age; } public String getName() { return name; } public void setName(String name) { this .name = name; } public int getAge() { return age; } public void setAge( int age) { this .age = age; } // 重寫克隆方法子列才可以調用 @Override protected Object clone() throws CloneNotSupportedException { return super .clone(); } } |
測試克隆學生類:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
package 克隆clone; /* * protected void finalize():當垃圾回收器確定不存在對該對象的更多引用時,由對象的垃圾回收器調用此方法。用于垃圾回收,但是什么時候回收不確定。 * protected Object clone():創建并返回此對象的一個副本。 * A:重寫該方法 * * Cloneable:此類實現了 Cloneable 接口,以指示 Object.clone() 方法可以合法地對該類實例進行按字段復制。 * 這個接口是標記接口,告訴我們實現該接口的類就可以實現對象的復制了。 */ public class StudentClone { public static void main(String[] args) throws CloneNotSupportedException { //創建學生對象 Student s = new Student(); s.setName( "林青霞" ); s.setAge( 27 ); //克隆學生對象 Object obj = s.clone(); Student s2 = (Student)obj; System.out.println( "---------" ); System.out.println(s.getName()+ "---" +s.getAge()); System.out.println(s2.getName()+ "---" +s2.getAge()); //以前的做法 Student s3 = s; System.out.println(s3.getName()+ "---" +s3.getAge()); System.out.println( "---------" ); //其實是有區別的 s3.setName( "劉意" ); s3.setAge( 30 ); System.out.println(s.getName()+ "---" +s.getAge()); System.out.println(s2.getName()+ "---" +s2.getAge()); System.out.println(s3.getName()+ "---" +s3.getAge()); System.out.println( "---------" ); //把克隆的改一下呢? s2.setName( "克隆改的名稱" ); s2.setAge( 66 ); System.out.println(s.getName()+ "---" +s.getAge()); System.out.println(s2.getName()+ "---" +s2.getAge()); System.out.println(s3.getName()+ "---" +s3.getAge()); //也就是說把一個對象的引用賦值給一個引用,當這個引用發什么該改變的時候,同一個引用指向的對象會發生改變,但是克隆的不會變化, //把克隆的對象改變他的一些屬性,那么也不會影響到其他的對象的值的改變 } } |
以上就是小編為大家帶來的淺談Java中的克隆close()和賦值引用的區別的全部內容了,希望對大家有所幫助,多多支持服務器之家~