如何在不调用java中的构造函数的情况下创建实例

时间:2016-04-24 14:34:27

标签: java serialization deserialization

我读了解反序列化java对象并且知道了,

在反序列化java对象时,如果实例实现了可序列化的接口,则创建该类的实例而不调用它的构造函数。

通过这个link,我开始了解Java使用sun.reflect.ReflectionFactory newConstructorForSerialization()方法来创建Class的新实例,而不需要调用构造函数。

是否为反序列化过程创建了全新的构造函数?

我想知道如何在不调用构造函数的情况下创建对象。 这个方法实际上是如何运作的,有人可以用简单的词语解释。

1 个答案:

答案 0 :(得分:1)

在Java字节码中,构造函数实际上是一个在已创建的对象上调用的方法。因此,如果您正在编写字节码,则可以跳过第二步。

实际上,有很多控制流构造可以在字节码中表达,但是你不能用Java源代码编写。

在内部,Java序列化内置于JVM中,因此它可以绕过它喜欢的任何规则。

这只是强调Java编程语言(其中new总是调用构造函数)和Java平台之间的区别(其中NEW是一个操作码,将所需类型的未构造实例推送到栈)。