Is it possible to create an instance of an object in Java without calling the constructor?

I'm trying to fix a bug in one of my programs which I think might be due to Hibernate figuring out how to instantiate an instance of an object without calling its default (or any other) constructor.


Solution 1:

Actually, yes, it is possible to bypass the constructor when you instantiate an object, if you use objenesis to instantiate the object for you. It does bytecode manipulations to achieve this.

Deserializing an object will also bypass the constructor.

It isn't possible to do this using reflection.

Solution 2:

Just to complete the picture: using method clone to create a new object bypasses constructors as well.

Solution 3:

Yes, deserializing an object does not invoke its constructor.

That said, I don't see why hibernate would serialize an object, unless perhaps in the second level cache.

Solution 4:

Deserialization involves creating objects without invoking a constructor.

It's possible (at least with the Sun/Oracle JDK) to do this programmatically. This was covered in "Creating Objects Without Calling Constructors", an edition of The Java Specialists' Newsletter. It involves using classes from the sun.* packages so isn't portable.