package aboutclone;
/**
* JAVA克隆之浅复制(此例来源于《JAVA编程思想》)
* NOTES:
* 类里的基本类型(此例中是 Char c)是深复制,自定义(此例是Snake next)或混合类型(如HashMap,ArrayList等)是浅复制.
* 所以深复制时要自己写克隆代码克隆每一个自定义类型(此例是Snake next)或混合类型的字段.
*/
public class Snake implements Cloneable {
private Snake next;
private char c;
// Value of i == number of segments
Snake(int i, char x) {
c = x;
if(--i > 0)
next = new Snake(i, (char)(x + 1));
}
void increment() {
c++;
if(next != null)
next.increment();
}
public String toString() {
String s = ":" + c;
if(next != null)
s += next.toString();
return s;
}
public Object clone() {
Object o = null;
try {
o = super.clone();
} catch (CloneNotSupportedException e) {}
return o;
}
public static void main(String[] args) {
Snake s = new Snake(5, 'a');
System.out.println("s = " + s);
Snake s2 = (Snake)s.clone();
System.out.println("s2 = " + s2);
System.out.print("s2==s ? ");
System.out.println(s2==s); //false,有深复制基本类型Char,两对象的第一个字段Char不同,
//但第二个引用类型Snake是指向同一对象,下面的打印输出可以看出.
System.out.print("s2.c==s.c ? ");
System.out.println(s2.c==s.c);//这里深复制了基本类型Char c ,值都是'a',所以为true
System.out.print("s2.next==s.next ? ");
System.out.println(s2.next==s.next);//这里没有深复制自定类型Snake,复制的是引用,但都是指向同一对象,所以为true
s.increment();
System.out.println("after s.increment");
System.out.print("s2.c==s.c ? ");
System.out.println(s2.c==s.c); //false, s2.c=='a' , s.c=='b'
System.out.print("s2.next==s.next ? ");
System.out.println(s2.next==s.next); //true , 浅复制,还是指用同一对象
System.out.println(
"after s.increment, s2 = " + s2);
System.out.println(
"after s.increment, s = " + s);
}
}
输出如下:
s = :a:b:c:d:e
s2 = :a:b:c:d:e
s2==s ? false
s2.c==s.c ? true
s2.next==s.next ? true
after s.increment
s2.c==s.c ? false
s2.next==s.next ? true
after s.increment, s2 = :a:c:d:e:f
after s.increment, s = :b:c:d:e:f
分享到:
相关推荐
深度克隆的例子,java的。深度克隆的例子,java的。
一个详细讲解JAVA_对象克隆的例子 希望可以帮助到你。
2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 ...
2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 ...
2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 ...
2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 ...
克隆上面的 repo 并从该 repo 的根文件夹运行: mvn spring-boot:run 克隆这个 repo 后,从一个单独的 shell 进入这个 repo 的根文件夹并运行: mvn clean install 应该得到类似于以下输出的内容: ---------------...
2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 ...
2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 总结...
2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 ...
在这个例子中,聊天室中的每个人本质上都是一个简单的演员,遵循一组简单的指令。 此外,每个人都知道聊天室中还有谁,并且所有其他参与者都遵循相同的指令集。 此示例场景类似于感知集群参与者使用的基本方法。 ...
2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码...
2.7 我们的第一个Java程序 2.8 注释和嵌入文档 2.8.1 注释文档 2.8.2 具体语法 2.8.3 嵌入HTML 2.8.4 @see:引用其他类 2.8.5 类文档标记 2.8.6 变量文档标记 2.8.7 方法文档标记 2.8.8 文档示例 2.9 编码样式 2.10 ...
10.8 一个完整的例子 第六章 高级Swing 6.1 列表 6.1.1 JList构件 6.1.2 列表模式 6.1.3 插入和移除值 6.1.4 值的绘制 6.2 表格 6.2.1 简单表格 6.2.2 表格模型 6.2.3对行和列的操作 6.3 树 6.3.1 简单的树 6.3.2 ...
clone的用法 希望有帮助,仅供参考 通过例子的分析,可以对克隆的方法有所深入了解
java俄罗斯框源码图形界面 是一个简单的图形用户界面api。 受到java的强烈启发。 外部库 SDL2 ()、SDL2_image、SDL2_ttf、SDL2_mixer 和 glew。 开源 ...例子 ...第三个是俄罗斯方块克隆游戏的一个例子。
java代码雨源码 :cloud_with_rain: 雨 一个演示python打包、...一个一个的文件。 宗旨 rain是一个实时且不受阻碍的参考,旨在教育而不是执行。 在线参考 与 pyscaffold 或 cookiecutter 不同,您不必在您的机器上执行