Java 创建对象的四种方式

来源:互联网 发布:网络语言大全 编辑:程序博客网 时间:2024/05/09 05:09

Java 创建对象一共有四种方式:

1. 运用new关键字来创建对象,这种方式最常见。用的最广。

2. 运用反射手段,调用java.lang.Class 或者 java.lang.reflect.Constructor 类的newInstance()实例方法

3. 调用对象的clone()方法

4. 运用序列化手段,调用java.io.ObjectInputStream 对象的 readObject()方法.

User对象

package com.demo;import java.io.Serializable;public class User implements Cloneable, Serializable {    private static final long serialVersionUID = 1L;    private Integer id;    private String name;    private String sex;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    @Override    public Object clone() throws CloneNotSupportedException {        return super.clone();    }    @Override    public String toString() {        StringBuilder builder = new StringBuilder();        builder.append("User [id=");        builder.append(id);        builder.append(", name=");        builder.append(name);        builder.append(", sex=");        builder.append(sex);        builder.append("]");        return builder.toString();    }}

测试代码

package com.demo;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;public class Main {    public static void main(String[] args) {        //1.运用new关键字来创建对象User        User user = new User();        user.setId(1);        user.setName("我是new出来的");        user.setSex("boy");        System.out.println("运用new关键字来创建的对象:" + user);        //2.运用反射手段,调用java.lang.Class 或者 java.lang.reflect.Constructor 类的newInstance()实例方法        //会有InstantiationException, IllegalAccessException, ClassNotFoundException三个异常        try {            User user1 = (User) Class.forName("com.demo.User").newInstance();            user1.setId(2);            user1.setName("我是反射出来的");            user1.setSex("girl");            System.out.println("运用反射手段来创建的对象:" + user1);        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e1) {            e1.printStackTrace();        }                //3.运用clone()方法产生新对象         //注意1.User对象必须实现 Cloneable接口,如class User implements Cloneable.        //注意2.User必须重写clone()方法,        try {            User temp = new User();            temp.setId(3);            temp.setName("我是clone出来的");            temp.setSex("boy&girl");            User user2 = (User) temp.clone();            System.out.println("运用clone()手段来创建的对象:" + user2);        } catch (CloneNotSupportedException e) {            e.printStackTrace();        }        //4.运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。        //注意:被序列化的对象必须implements Serializable        User temp = new User();        temp.setId(4);        temp.setName("我是反序列化出来的");        temp.setSex("boy&girl");        User user3 = cloneTo(temp);        System.out.println("运用反序列化手段来创建的对象:" + user3);            }    @SuppressWarnings("unchecked")    public static <T> T cloneTo(T src) throws RuntimeException {          ByteArrayOutputStream memoryBuffer = new ByteArrayOutputStream();          ObjectOutputStream out = null;        ObjectInputStream in = null;        T dist = null;            try {              out = new ObjectOutputStream(memoryBuffer);              out.writeObject(src);              out.flush();              in = new ObjectInputStream(new ByteArrayInputStream(                      memoryBuffer.toByteArray()));              dist = (T) in.readObject();            } catch (Exception e) {              throw new RuntimeException(e);          } finally {              if (out != null)                  try {                      out.close();                      out = null;                  } catch (IOException e) {                      throw new RuntimeException(e);                  }              if (in != null)                  try {                      in.close();                      in = null;                  } catch (IOException e) {                      throw new RuntimeException(e);                  }          }            return dist;      }  }

运行效果:

运用new关键字来创建的对象:User [id=1, name=我是new出来的, sex=boy]运用反射手段来创建的对象:User [id=2, name=我是反射出来的, sex=girl]运用clone()手段来创建的对象:User [id=3, name=我是clone出来的, sex=boy&girl]运用反序列化手段来创建的对象:User [id=4, name=我是反序列化出来的, sex=boy&girl]


0 0
原创粉丝点击