





















java.lang.Object里面有一个方法clone(),看方法说明就知道是用于复制对象的可是方法确实protected(受保护)类型的.看得到却用不到.
其实clone()被定义为protected是有原因的,因为有些时候某些类实例我们不希望能被复制.那我们怎么用这个方法呢?只要使用一个super关键字就够了.下面例子可以解释清楚clone()的作用与其用法:
1
public class C
2
{
3
static class Strings implements Cloneable
4
{
5
private String str;
6
7
public void SetStr(String s){
8
this.str = s;
9
}
10
11
public String GetStr(){
12
return this.str;
13
}
14
15
public Object clone()throws CloneNotSupportedException{
16
return super.clone();
17
}
18
}
19
20
public static void main(String[] args)
21
{
22
try{
23
Strings str1 = new Strings();
24
str1.SetStr("Hello World!");
25
26
System.out.println("-----------------");
27
28
System.out.println("str1.SetStr(\"Hello World!\");");
29
System.out.println("str2 = (Strings)str1.clone();");
30
Strings str2 = (Strings)str1.clone();
31
System.out.println("str1:"+str1.GetStr());
32
System.out.println("str2:"+str2.GetStr());
33
System.out.print("print object str1:");
34
System.out.println(str1);
35
System.out.print("print object str2:");
36
System.out.println(str2);
37
38
System.out.println("-----------------");
39
40
System.out.println("str2.setStr(\"Hello!\");");
41
str2.SetStr("Hello!");
42
System.out.println("str1:"+str1.GetStr());
43
System.out.println("str2:"+str2.GetStr());
44
System.out.print("print object str1:");
45
System.out.println(str1);
46
System.out.print("print object str2:");
47
System.out.println(str2);
48
49
System.out.println("-----------------");
50
51
System.out.println("str1 = str2;");
52
str1 = str2;
53
System.out.print("print object str1:");
54
System.out.println(str1);
55
System.out.print("print object str2:");
56
System.out.println(str2);
57
58
System.out.println("-----------------");
59
}catch(Exception ex){
60
System.out.println(ex.toString());
61
}
62
}
63
}
运行结果:
-----------------
str1.SetStr("Hello World!");
str2 = (Strings)str1.clone();
str1:Hello World!
str2:Hello World!
print object str1:C$Strings@de6ced
print object str2:C$Strings@c17164
-----------------
str2.setStr("Hello!");
str1:Hello World!
str2:Hello!
print object str1:C$Strings@de6ced
print object str2:C$Strings@c17164
-----------------
str1 = str2;
print object str1:C$Strings@c17164
print object str2:C$Strings@c17164
-----------------

由运行结果可以看出通过clone方法返回的对象是一个新对象,而且其属性与原对象完全一致,也就是原对象的副本.而通过"="赋值的话却得到的是同一个对象.
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。