获取对象的几种方式与构造函数Constructor的调用

来源:互联网 发布:html5手机微场景源码 编辑:程序博客网 时间:2024/05/29 16:28

1.获取对象的方式

1.获取对象的方式有new,反射,反序列化和克隆。

2.构造函数Constructor的调用

1.获取对象时构造函数调用示意:

方式 父类构造体是否被调用 该对象构造体是否被调用 new Y Y 反射 Y Y 反序列化 Y N 克隆 N N

2.代码

public class Animal {    public Animal() {        System.out.println("Animal Constructor called");    }}
public class Person extends Animal implements Serializable, Cloneable{    public Person() {        System.out.println("Person Constructor called");    }    @Override    protected Object clone() throws CloneNotSupportedException {        // TODO Auto-generated method stub        return super.clone();    }}
public static void main(String[] args) {        System.out.println("----------------new start");        Person person1 = new Person();        System.out.println("----------------new end\n");        System.out.println("----------------reflect start");        Class c = Person.class;        try {            Person person2 = (Person) c.newInstance();        } catch (Exception e) {            e.printStackTrace();        }        System.out.println("----------------reflect end\n");        System.out.println("----------------serializable start");        //将对象写入文件        File file = new File("E://test.txt");        FileOutputStream fileOutputStream = null;        ObjectOutputStream objectOutputStream = null;        try {            if (file.exists()) {                file.delete();            }            fileOutputStream = new FileOutputStream(file);            objectOutputStream = new ObjectOutputStream(fileOutputStream);            objectOutputStream.writeObject(person1);        } catch (Exception e) {            e.printStackTrace();        } finally {            try {                if (objectOutputStream != null) {                    objectOutputStream.close();                    objectOutputStream = null;                }            } catch (Exception e) {                e.printStackTrace();            }            try {                if (fileOutputStream != null) {                    fileOutputStream.close();                    fileOutputStream = null;                }            } catch (Exception e) {                e.printStackTrace();            }        }        // 将对象从文件中读出来        FileInputStream fileInputStream = null;        ObjectInputStream objectInputStream = null;        try {            fileInputStream = new FileInputStream(file);            objectInputStream = new ObjectInputStream(fileInputStream);            Person Person3 = (Person) objectInputStream.readObject();        }catch (Exception e) {            e.printStackTrace();        } finally {            try {                if (objectInputStream != null) {                    objectInputStream.close();                    objectInputStream = null;                }            } catch (Exception e) {                e.printStackTrace();            }            try {                if (fileInputStream != null) {                    fileInputStream.close();                    fileInputStream = null;                }            } catch (Exception e) {                e.printStackTrace();            }            if (file.exists()) {                file.delete();            }        }        System.out.println("----------------serializable end\n");        System.out.println("----------------clone start");        try {            Person person4 = (Person) person1.clone();        } catch (Exception e) {            e.printStackTrace();        }        System.out.println("----------------clone end\n");    }

运行结果:

----------------new startAnimal Constructor calledPerson Constructor called----------------new end----------------reflect startAnimal Constructor calledPerson Constructor called----------------reflect end----------------serializable startAnimal Constructor called----------------serializable end----------------clone start----------------clone end
0 0
原创粉丝点击