一味宠爱|七夕面向对象编程,你知道Java有哪些创建对象的方式吗?

1、用new关键字创建对象 , 需要使用构造器 。//1、使用关键字new创建对象(没有参数调用无参构造、传入参数调用带参构造)Girlfriend girlfriend01 = new Girlfriend();Girlfriend girlfriend02 = new Girlfriend("y", 18);1234new 一个对象经过了哪些过程?
2、使用反射机制创建对象 , 用Class类或Constructor类的newInstance()方法 。当使用Class类里的newInstance()方法 , 调用的是无参构造方法 。
当使用java.lang.reflect.Constructor类里的newInstance方法 , 调用的是有参构造方法 。
1、Class类里的newInstance()【一味宠爱|七夕面向对象编程,你知道Java有哪些创建对象的方式吗?】调用的是无参构造方法
一味宠爱|七夕面向对象编程,你知道Java有哪些创建对象的方式吗?2、Constructor类的newInstance()方法调用的是有参构造方法
一味宠爱|七夕面向对象编程,你知道Java有哪些创建对象的方式吗?3、通过object类的clone方法需要实现Cloneable接口 , 重写object类的clone方法 。 无论何时我们调用一个对象的clone方法 , JVM就会创建一个新的对象 , 将前面对象的内容全部拷贝进去 。 用clone方法创建对象并不会调用任何构造函数 。
一味宠爱|七夕面向对象编程,你知道Java有哪些创建对象的方式吗?4、使用反序列化通过ObjectInputStream的readObject()方法反序列化类当我们序列化和反序列化一个对象 , JVM会给我们创建一个单独的对象 。 为了反序列化一个对象 , 我们需要让我们的类实现Serializable接口 。 在反序列化时 , JVM创建对象并不会调用任何构造函数 。
一味宠爱|七夕面向对象编程,你知道Java有哪些创建对象的方式吗?通过反序列化生成对象的过程主要由以下几个步骤:
1、创建一个对象输入流 , 它可以包装一个其他类型的源输入流 , 如文件输入流;
2、 通过对象输入流的readObject()方法读取对象 。
一味宠爱|七夕面向对象编程,你知道Java有哪些创建对象的方式吗?
一味宠爱|七夕面向对象编程,你知道Java有哪些创建对象的方式吗?序列化工具类
public class ObjectUtils {public staticT clone(Girlfriend obj) {T cloneObj = null;try {//写入字节流ByteArrayOutputStream out = new ByteArrayOutputStream();ObjectOutputStream obs = new ObjectOutputStream(out);obs.writeObject(obj);obs.close();//分配内存 , 写入原始对象 , 生成新对象ByteArrayInputStream bis = new ByteArrayInputStream(out.toByteArray());ObjectInputStream ois = new ObjectInputStream(bis);//返回新生成的对象cloneObj = (T) ois.readObject();bis.close();out.close();} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}return cloneObj;}}1234567891011121314151617181920212223242526创建对象各方法的代码 public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, CloneNotSupportedException {//1、使用关键字new创建对象(没有参数调用无参构造、传入参数调用带参构造)Girlfriend girlfriend01 = new Girlfriend();Girlfriend girlfriend02 = new Girlfriend("y", 18);//2、使用反射机制创建对象 , 使用Class的newInstance()调用默认的无参构造Girlfriend girlfriend03 = Girlfriend.class.newInstance();//反射机制2 , 调用带参Class


推荐阅读