Java创建新对象的5种方式

本文详细介绍了Java中创建新对象的五种方式:使用new关键字、反射机制、调用Clone()方法、反序列化方法以及使用Constructor类的newInstance方法。并对比了这些方法在调用构造函数上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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<person> 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方法没有调用构造函数
使用反序列化没有调用构造函数
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值