package clone; //本例子阐释了clone的魅力,影子克隆
class UnCloneA {
private int i;
public UnCloneA(int ii) {
i = ii;
}
public void doublevalue() {
i *= 2;
}
public String toString() {
return Integer.toString(i); //把整数转换为字符串
}
}
class CloneB implements Cloneable{ //实现了克隆接口 Cloneable
public int aInt;
public UnCloneAA unCA = new UnCloneAA(111);
public Object clone(){ //重写clone方法
CloneB o = null;
try{
o = (CloneB)super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return o;
}
}
public class CloneMain影子克隆 {
public static void main(String[] a){
CloneB b1 = new CloneB();
b1.aInt = 11;
System.out.println("before clone,b1.aInt = "+ b1.aInt);
System.out.println("before clone,b1.unCA = "+ b1.unCA);
CloneB b2 = (CloneB)b1.clone(); //b1的克隆
b2.aInt = 22;
b2.unCA.doublevalue();
System.out.println("=================================");
System.out.println("after clone,b1.aInt = "+ b1.aInt);
System.out.println("after clone,b1.unCA = "+ b1.unCA); //已经被改变了
System.out.println("=================================");
System.out.println("after clone,b2.aInt = "+ b2.aInt);
System.out.println("after clone,b2.unCA = "+ b2.unCA);
}
}
/** RUN RESULT:
* before clone,b1.aInt = 11 before clone,b1.unCA = 111
* =================================
* after clone,b1.aInt = 11 after clone,b1.unCA = 222
* =================================
* after clone,b2.aInt = 22 after clone,b2.unCA = 222 */
package clone;
class UnCloneAA implements Cloneable{
private int i;
public UnCloneAA(int ii) {
i = ii;
}
public void doublevalue() {
i *= 2;
}
public String toString() {
return Integer.toString(i);
}
public Object clone(){ //深度克隆这个类也要重写这个方法
UnCloneAA o = null;
try{
o = (UnCloneAA)super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return o;
}
}
class CloneBB implements Cloneable{
public int aInt;
public UnCloneAA unCAA = new UnCloneAA(111);
public Object clone(){
CloneBB o = null;
try{
o = (CloneBB)super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
o.unCAA = (UnCloneAA)unCAA.clone(); //深度克隆必加的一句
return o;
}
}
public class CloneMain深度克隆 {
public static void main(String[] a){
CloneBB b1 = new CloneBB();
b1.aInt = 11;
System.out.println("before clone,b1.aInt = "+ b1.aInt);
System.out.println("before clone,b1.unCA = "+ b1.unCAA);
CloneBB b2 = (CloneBB)b1.clone(); //克隆
b2.aInt = 22;
b2.unCAA.doublevalue();
System.out.println("=================================");
System.out.println("after clone,b1.aInt = "+ b1.aInt);
System.out.println("after clone,b1.unCA = "+ b1.unCAA);
System.out.println("=================================");
System.out.println("after clone,b2.aInt = "+ b2.aInt);
System.out.println("after clone,b2.unCA = "+ b2.unCAA);
}
}
/*before clone,b1.aInt = 11
before clone,b1.unCA = 111
=================================
after clone,b1.aInt = 11
after clone,b1.unCA = 111
=================================
after clone,b2.aInt = 22
after clone,b2.unCA = 222
*/
package clone;
class UnCloneAAA implements Cloneable{
private int i;
public UnCloneAAA(int ii) {
i = ii;
}
public void doublevalue() {
i *= 2;
}
public String toString() {
return Integer.toString(i);
}
public Object clone(){
UnCloneAAA o = null;
try{
o = (UnCloneAAA)super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return o;
}
}
class CloneBBB implements Cloneable{
public int aInt;
public UnCloneAAA unCAAA = new UnCloneAAA(111);
public Object clone(){
CloneBBB o = null;
try{
o = (CloneBBB)super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
o.unCAAA = (UnCloneAAA)unCAAA.clone();
return o;
}
}
public class CloneMain完美克隆 {
public static void main(String[] a){
CloneBBB b1 = new CloneBBB();
b1.aInt = 11;
System.out.println("before clone,b1.aInt = "+ b1.aInt);
System.out.println("before clone,b1.unCA = "+ b1.unCAAA);
CloneBBB b2 = (CloneBBB)b1.clone();
b2.aInt = 22;
b2.unCAAA.doublevalue();
System.out.println("=================================");
System.out.println("after clone,b1.aInt = "+ b1.aInt);
System.out.println("after clone,b1.unCA = "+ b1.unCAAA);
System.out.println("=================================");
System.out.println("after clone,b2.aInt = "+ b2.aInt);
System.out.println("after clone,b2.unCA = "+ b2.unCAAA);
}
}
/*before clone,b1.aInt = 11
before clone,b1.unCA = 111
=================================
after clone,b1.aInt = 11
after clone,b1.unCA = 111
=================================
after clone,b2.aInt = 22
after clone,b2.unCA = 222
*/
分享到:
相关推荐
实例055 Java对象的浅克隆 80 实例056 Java对象的深克隆 82 实例057 序列化与对象克隆 84 实例058 深克隆效率的比较 87 第7章 面向对象进阶 89 实例059 经理与员工的差异 90 实例060 重写父类中的方法 92 实例061 ...
Java设计模式,目录:前言,UML建模技术,深入浅出UML类图,从招式与内功谈起——设计模式概述,面向对象设计原则,工厂三兄弟之简单工厂模式,工厂三兄弟之工厂方法模式,工厂三兄弟之抽象工厂模式,确保对象的唯一...
118.在 hibernate 中使用 Integer 和 int 做映射有什么区别? 119.hibernate 是如何工作的? 120.get()和 load()的区别? 121.说一下 hibernate 的缓存机制? 122.hibernate 对象有哪些状态? 123.在 hibernate 中 ...
实例110 Java对象的浅克隆 135 实例111 Java对象的深克隆 137 实例112 序列化与对象克隆 139 实例113 深克隆效率的比较 141 实例114 transient关键字的应用 143 5.7 接口和内部类 145 实例115 使用sort()方法排序 ...
63. 深拷贝和浅拷贝区别是什么? 28 六、Java Web 28 64. jsp 和 servlet 有什么区别? 28 65. jsp 有哪些内置对象?作用分别是什么? 29 66. 说一下 jsp 的 4 种作用域? 29 67. session 和 cookie 有什么区别? 30...
IndexWriter的构造函数初始化,调用了一个init方法,init方法在IndexWriter类中有具体实现,它还有一个重载的init方法。先看这里用到的这个,它的实现代码如下所示: /** * 该方法中的参数列表中。各个参数的含义...
对象的浅克隆和深克隆; 类加载 类加载过程(类加载从磁盘上将字节码文件(.class文件)中的内容读入虚拟机,并保存起来) 类加载特性 ; 类加载的时机: 三种类加载器: 双亲委派机制概念; 怎么解决双亲委派机制; ...
1.5.5 为克隆使用序列化 1.6 文件管理 1.7 新I/O 1.7.1 内存映射文件 1.7.2 缓冲区数据结构 1.7.3 文件加锁机制 1.8 正则表达式 第十二章 XML 2.1 XML概述 2.1.1 XML文档的结构 2.2 解析XML文档 2.3 验证XML文档 ...
几何API Java Java的Esri Geometry API可用于在第三方数据处理解决方案中启用空间数据处理。 Hadoop基于MapReduce的定制应用程序的开发人员可以使用此API在Hadoop系统中进行数据的空间处理。 也使用该API,开发人员...
包文件夹中有三个类。 您将按如下所示更新这些 java 文件。 猫类 更新 Cat 类以具有以下私有实例变量: 名称 年龄 为姓名和年龄添加 get 和 set 函数。 (即 getName/setName 和 getAge/setAge) 添加一个 getHuma
com.pancm.basics - 一些Java基础相关类 主要是三大特性、修饰符、io、集合、反射、克隆等等相关代码 com.pancm.bigdata - 大数据相关的类 主要是hbase、storm、zookeeper等等相关的代码 com.pancm.c
适用于监控所有Java应用,具有堆内存监控、方法区监控、GC监控、类加载监控、类编译监控与线程监控,提供堆快照下载,线程快照下载。 若使用本项目二次开发请遵守Apache开源协议,并在项目主页做上述文字说明且附上...
【Mybatis】MyBatis中使用#和$书写占位符有什么区别? 100 【Mybatis】Mybatis是如何进行分页的?分页插件的原理是什么? 100 【数据库】什么是事务?事务的四个特性?事务的隔离级别?什么是脏读,不可重复读,幻读...
##注释|注释|概述| |---|---|---| |@克隆| 如果这个注解被添加到一个类中,clone 方法应该在类和子类中被覆盖。| |@必须覆盖| 如果将此注释添加到方法中,则应在子类中覆盖该方法。| |@SuppressCloneWarning| 如果...
依存关系Java 6 JUnit 3.8.1用于单元测试Maven3构建安装克隆存储库用mvn package构建用将您构建的JAR添加到类路径中。 扩展AbstractSearchProblem并实现SearchProblemInterface 。 有关示例,请参Graph 。 调用预...