我读了解反序列化java对象并且知道了,
在反序列化java对象时,如果实例实现了可序列化的接口,则创建该类的实例而不调用它的构造函数。
通过这个link,我开始了解Java使用sun.reflect.ReflectionFactory newConstructorForSerialization()方法来创建Class的新实例,而不需要调用构造函数。
是否为反序列化过程创建了全新的构造函数?
我想知道如何在不调用构造函数的情况下创建对象。 这个方法实际上是如何运作的,有人可以用简单的词语解释。
答案 0 :(得分:1)
在Java字节码中,构造函数实际上是一个在已创建的对象上调用的方法。因此,如果您正在编写字节码,则可以跳过第二步。
实际上,有很多控制流构造可以在字节码中表达,但是你不能用Java源代码编写。
在内部,Java序列化内置于JVM中,因此它可以绕过它喜欢的任何规则。
这只是强调Java编程语言(其中new
总是调用构造函数)和Java平台之间的区别(其中NEW
是一个操作码,将所需类型的未构造实例推送到栈)。