请看如下例子:
package com.review; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class TestClone implements Cloneable, Serializable { private static final long serialVersionUID = -3859091253969968165L; private int age; private String name; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public TestClone(int age, String name) { this.age = age; this.name = name; } public TestClone() { super(); } @Override protected Object clone() throws CloneNotSupportedException { // TODO Auto-generated method stub return super.clone(); } @Override public String toString() { return "TestClone [age=" + age + ", name=" + name + "]"; } public static void main(String[] args) throws CloneNotSupportedException, InstantiationException, IllegalAccessException, ClassNotFoundException, IOException { // new TestClone tc = new TestClone(18, "obj1"); // clone TestClone tc2 = (TestClone) tc.clone(); // newInstance TestClone tc3 = (TestClone) Class.forName("com.review.TestClone") .newInstance(); // I/O FileOutputStream fos = new FileOutputStream("testClone.tmp"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(tc); oos.close(); fos.close(); FileInputStream fis = new FileInputStream("testClone.tmp"); ObjectInputStream ois = new ObjectInputStream(fis); TestClone tc4 = (TestClone) ois.readObject(); ois.close(); fis.close(); System.out.println(tc.toString()); System.out.println(tc2.toString()); System.out.println(tc3.toString()); System.out.println(tc4.toString()); } }结果集如下:
TestClone [age=18, name=obj1] TestClone [age=18, name=obj1] TestClone [age=0, name=null] TestClone [age=18, name=obj1]在调用newInstance方法时,调用的是TestClone的无参构造方法,所以age跟name都显示的是默认值。