Java创建新对象的5种方式

Java种有5种创建新对象的方式

  1. 调用关键字new
    这种也是我们一开始最常见的方式:
person p1 = new person("zs", 20, "男");

  1. 使用反射机制
    反射机制有两种方法,一种是使用Class类的newInstance方法。
    调用无参的构造方法。
            person p2;
            try {
                p2=(person)Class.forName("ioText/tex2").newInstance();
                //或者也可以
                p2=person.getClass().newInstance();
            }catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }

另外一种方法是调用Constructor类中的newInstance方法。java.lang.reflect.Constructor类里也有一个newInstance方法可以创建对象。我们可以通过这个方法调用有参数的和私有的构造函数。

        try {
             Constructor c=person.class.getConstructor();
             person p3=c.newInstance();
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
               e.printStackTrace();
            }
  1. 调用Clone()方法
    再调用Clone方法前,要注意的是我们要先实现Cloneable接口,并且定义clone()方法。
person p = new person("zs", 20, "男");
person p1= (person)p.clone();
  1. 反序列化方法
    当我们序列化或者反序列化一个对象,jvm会给我们创建一个单独的对象。在我们反序列化时,jvm创建对象并不会调用构造函数。在使用反序列化前,我们要像Clone()方法一样,实现Serializable接口。
       try {
                ObjectInputStream in =
                        new ObjectInputStream(new FileInputStream("D:/java2/ioText/text2.txt"));
                person p = (person) in.readObject();
                System.out.println(p);
            } catch (IOException | ClassNotFoundException e) {
                e.printStackTrace();
            }

我们对五种创建方法进行对比,会发现方法1,2,3用构造函数创建对象,方法4,5没有调用构造函数。

创建方式 是否调用构造函数
使用new关键字 调用了构造函数
使用Constructor类的newInstance方法 调用了构造函数
使用Class类的newInstance方法 调用了构造函数
使用clone方法 没有调用构造函数
使用反序列化 没有调用构造函数

你可能感兴趣的:(Java创建新对象的5种方式)