【发布时间】:2022-08-11 22:35:05
【问题描述】:
前几天跟朋友聊过这个。
使用构造函数很明显,但是还有其他方法吗?
-
有一些方法可以间接创建对象,例如反序列化,但它们最终都会在挂钩下调用构造函数 AFAIK。
-
@RobertHarvey:反序列化本身实际上是在不调用构造函数的情况下构造对象的一种方式。
前几天跟朋友聊过这个。
使用构造函数很明显,但是还有其他方法吗?
在java中创建对象有四种不同的方法:
A. 使用新关键字 这是在java中创建对象的最常用方法。几乎 99% 的对象都是以这种方式创建的。
MyObject object = new MyObject();
B. 使用 Class.forName() 如果我们知道类的名称并且如果它有一个公共的默认构造函数,我们可以用这种方式创建一个对象。
MyObject object = (MyObject) Class.forName("subin.rnd.MyObject").newInstance();
C. 使用 clone() clone() 可用于创建现有对象的副本。
MyObject anotherObject = new MyObject();
MyObject object = (MyObject) anotherObject.clone();
D. 使用对象反序列化 对象反序列化只不过是从其序列化形式创建一个对象。
ObjectInputStream inStream = new ObjectInputStream(anInputStream );
MyObject object = (MyObject) inStream.readObject();
这些是一些常见的方法,还有更多...
【讨论】: