发布于 2016-08-09 21:49:01 | 84 次阅读 | 评论: 0 | 来源: 网友投递
Java程序设计语言
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
public class DeepCloneTest {
private class CloneTest {
private Long myLong = new Long(1);
}
public static void main(String args[]) {
new DeepCloneTest().Test();
}
public void Test() {
CloneTest ct1 = new CloneTest();
CloneTest ct2 = ct1;
// to see if ct1 and ct2 are one same reference.
System.out.println("ct1: " + ct1);
System.out.println("ct2: " + ct2);
// if ct1 and ct2 point to one same object, then ct1.myLong == ct2.myLong.
System.out.println("ct1.myLong: " + ct1.myLong);
System.out.println("ct2.myLong: " + ct2.myLong);
// we change ct2's myLong
ct2.myLong = 2L;
// to see whether ct1's myLong was changed.
System.out.println("ct1.myLong: " + ct1.myLong);
System.out.println("ct2.myLong: " + ct2.myLong);
}
}
public class DeepCloneTest{
// must implements Cloneable.
private class CloneTest implements Cloneable{
private Object o = new Object();
public CloneTest clone() {
CloneTest ct = null;
try {
ct = (CloneTest)super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return ct;
}
}
public static void main(String args[]) {
new DeepCloneTest().Test();
}
public void Test() {
CloneTest ct1 = new CloneTest();
CloneTest ct2 = ct1.clone();
// to see if ct1 and ct2 are one same reference.
System.out.println("ct1: " + ct1);
System.out.println("ct2: " + ct2);
// whether ct1.o == ct2.o ? yes
System.out.println("ct1.o " + ct1.o);
System.out.println("ct1.o " + ct1.o);
}
}
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class DeepCloneTest {
// must implements Cloneable.
private class CloneTest implements Serializable{
private static final long serialVersionUID = 1L;
private Object o = new Object();
public CloneTest deepClone() {
CloneTest ct = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(this);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ObjectInputStream ois= new ObjectInputStream(bais);
ct = (CloneTest)ois.readObject();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return ct;
}
}
public static void main(String args[]) {
new DeepCloneTest().Test();
}
public void Test() {
CloneTest ct1 = new CloneTest();
CloneTest ct2 = ct1.deepClone();
// to see if ct1 and ct2 are one same reference.
System.out.println("ct1: " + ct1);
System.out.println("ct2: " + ct2);
// whether ct1.o == ct2.o ? no
System.out.println("ct1.o " + ct1.o);
System.out.println("ct1.o " + ct1.o);
}
}
克隆任务完成。