是否可以在不调用构造函数的情况下在Java中创建对象的实例?

时间:2010-08-15 15:53:34

标签: java

我正在尝试修复我的一个程序中的错误,我认为这可能是由于Hibernate确定了如何在不调用其默认(或任何其他)构造函数的情况下实例化对象的实例。

4 个答案:

答案 0 :(得分:27)

实际上,是的,如果使用objenesis为您实例化对象,则在实例化对象时可以绕过构造函数。它执行字节码操作来实现此目的。

反序列化对象也将绕过构造函数。

使用反射无法做到这一点。

答案 1 :(得分:9)

只是为了完成图片:使用方法clone创建一个新对象也绕过构造函数。

答案 2 :(得分:7)

是的,反序列化对象不会调用其构造函数。

那就是说,我不明白为什么hibernate会序列化一个对象,除非在二级缓存中。

答案 3 :(得分:7)

反序列化涉及在不调用构造函数的情况下创建对象。

可以(至少使用Sun / Oracle JDK)以编程方式执行此操作。 "Creating Objects Without Calling Constructors"版本涵盖了这一点,The Java Specialists' Newsletter.版本涉及使用sun.*包中的类,因此无法移植。