五种方法创建java对象
作为开发人员,我们通常每天都会创建许多对象,但是我们总是使用新的或依赖管理系统(例如)来创建这些对象。但是,有更多方法可以创建本文中将要研究的对象。
用Java创建对象的共有5种核心方式,下面将以其示例加以说明,然后介绍创建对象的行的字节码。但是,有很多API可以为我们创建对象,但是这些API还将间接使用这5种核心方式之一,例如。
如果您将执行最后给出的程序,则会看到方法1、2、3使用构造函数创建对象,而4、5没有调用构造函数创建对象。
1、使用新关键字
这是创建对象的最常见和常规的方法,也是一种非常简单的方法。通过使用此方法,我们可以调用要调用的任何构造函数(无参数的构造函数和参数化的)。
2.使用Class类的newInstance()方法
我们还可以使用类的方法创建一个对象。此方法调用构造函数来创建对象。
我们可以通过通过以下方式创建对象:
Or
3.使用构造方法类的newInstance()方法
与方法类似,类中有一个方法可用于创建对象。我们还可以使用此方法来调用参数化构造函数和私有构造函数。
这两种方法都被称为创建对象的反射方式。实际上,类的方法在内部使用了类的方法。这就是为什么最好使用后一种方法,并且也将其用于诸如,Hibernate,Struts等不同框架的原因。要了解这两种newInstance()方法之间的区别,请阅读使用Example在Java中通过Reflection创建对象。
4.使用clone()方法:
每当我们在任何对象上调用时,JVM实际上都会为我们创建一个新对象,并将先前对象的所有内容复制到其中。使用方法创建对象不会调用任何构造函数。
要在对象上使用方法,我们需要实现并在其中定义方法。
Java克隆是Java社区中最值得探讨的话题,它的确有其缺点,但是在对象完全满足Java克隆的强制条件之前,它仍然是创建任何对象的副本的最流行和最简单的方法。
5.使用反序列化
每当我们序列化然后反序列化一个对象时, JVM就会为我们创建一个单独的对象。在反序列化中,JVM不使用任何构造函数来创建对象。要反序列化对象,我们需要在类中实现Serializable接口。
正如我们在上面的字节码中看到的那样,所有四个方法调用都转换为invokevirtual(这些方法直接处理对象的创建),除了第一个转换为两个调用的方法是一个是新的,另一个是调用特殊的(对构造函数的调用)。
例:
让我们考虑一个我们要为其创建对象的类:
在下面的Java程序中,我们将以所有5种方式创建Employee对象。
该程序将给出以下输出:
领取专属 10元无门槛券
私享最新 技术干货