java新建对象的4中方法

来源:互联网 发布:神武3手游狮驼数据 编辑:程序博客网 时间:2024/06/05 21:08

不说了,直接看代码:

import java.io.*;import java.lang.reflect.Field;class Person implements Cloneable, Serializable{    private String name;    private int age;    public Person() {    }    public Person(String name, int age) {        this.name = name;        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    @Override    protected Object clone() throws CloneNotSupportedException {        return super.clone();    }    public String print() {        return "Person{" +                "name='" + name + '\'' +                ", age=" + age +                '}';    }}public class CreateObj {    public static void main(String[] args) {        // 第一种方法,直接new一个对象        Person person1 = new Person("Person1", 1);        // 第二种方法,使用clone方法        // 首先Person必须实现Cloneable接口        // 接着重写clone()方法,注意类中的引用对象。        Person person2 = null;        try {            person2 = (Person) person1.clone();            person2.setName("Person2");            person2.setAge(2);        } catch (CloneNotSupportedException e) {            e.printStackTrace();        }        // 第三种方法,使用反射机制        Class<Person> personClass = Person.class;        Person person3 = null;        try {            person3 = personClass.newInstance();            Field[] fields = personClass.getDeclaredFields();            for (int i = 0; i < fields.length; i++) {                fields[i].setAccessible(true);                if ("name".equals(fields[i].getName())) {                    fields[i].set(person3, "Person3");                }                if ("age".equals(fields[i].getName())) {                    fields[i].set(person3, 3);                }            }        } catch (InstantiationException e) {            e.printStackTrace();        } catch (IllegalAccessException e) {            e.printStackTrace();        }        // 第四种方法,使用ObjectOutputStream和ObjectInputStream        // 通过序列化和反序列化复制对象        // 类必须实现Serializable接口        Person person4 = null;        try {            ByteArrayOutputStream baos = new ByteArrayOutputStream();            ObjectOutputStream oos = new ObjectOutputStream(baos);            oos.writeObject(person1);            ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));            person4 = (Person) ois.readObject();            person4.setName("Person4");            person4.setAge(4);        } catch (ClassNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        System.out.println(person1);        System.out.println(person2 == null ? "" : person2);        System.out.println(person3 == null ? "" : person3);        System.out.println(person4 == null ? "" : person4);        System.out.println("--------------------------------");        System.out.println(person1.print());        if (person2 != null)            System.out.println(person2.print());        if (person3 != null)            System.out.println(person3.print());        if (person4 != null)            System.out.println(person4.print());    }}

运行结果:

createobj.Person@7f31245acreateobj.Person@2503dbd3createobj.Person@4b67cf4dcreateobj.Person@7ea987ac--------------------------------Person{name='Person1', age=1}Person{name='Person2', age=2}Person{name='Person3', age=3}Person{name='Person4', age=4}

可以看到,四个对象的地址都不相同。

0 0
原创粉丝点击