创建对象的四种方式

来源:互联网 发布:音乐相册制作软件排名 编辑:程序博客网 时间:2024/06/05 14:36
package onlyfortest;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;public class Main implements Cloneable, Serializable {    private static final long serialVersionUID = 1L;    public Main() {        System.out.println("构造函数");    }    public static void main(String[] args) {        Main a = new Main();        Main b;        Main c;        Main d;        try {            b = Main.class.newInstance();        } catch (InstantiationException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IllegalAccessException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        try {            c = (Main) a.clone();            if (a != c) {                System.out.println("克隆对象不使用同一片内存,且不需要调用构造函数");            }        } catch (CloneNotSupportedException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        /**         * 简单来说,Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。         * 在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体         * (类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。         * 当实现java         * .io.Serializable接口的实体(类)没有显式地定义一个名为serialVersionUID,类型为long的变量时,         * Java序列化机制会根据编译的class自动生成一个serialVersionUID作序列化版本比较用,         * 这种情况下,只有同一次编译生成的class才会生成相同的serialVersionUID         */        try {            ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("MainBean.txt"));            out.writeObject(a);            ObjectInputStream in = new ObjectInputStream(new FileInputStream("MainBean.txt"));            d = (Main) in.readObject();            if (a != d) {                System.out.println("反序列化后对象不使用同一片内存,且不需要调用构造函数");            }        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (ClassNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}