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

前端 未结 4 1366
旧巷少年郎
旧巷少年郎 2020-11-30 06:54

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 (

相关标签:
4条回答
  • 2020-11-30 07:08

    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.

    0 讨论(0)
  • 2020-11-30 07:21

    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.

    0 讨论(0)
  • 2020-11-30 07:24

    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.

    0 讨论(0)
  • 2020-11-30 07:31

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

    0 讨论(0)
提交回复
热议问题