TGViewer
Java Guru 🤓 Java Guru 🤓 @javatasks · 13.1K subscribers
Post #3719 1.14K
Как создать объект в обход конструктора?

Этот пост – не рекомендация. Описанное здесь крайне редко имеет основание к применению (если имеет вообще).

Десериализация – полагается, что сериализационная форма уже была когда-то сконструирована, теперь же экземпляр просто восстанавливается с помощью метода readObject. Вызывается конструктор ближайшего не serializable родителя.

Внутри десериализация использует ReflectionFactory.newConstructorForSerialization из пакета sun.reflect – метод создания объекта заданного типа с указанным (возможно родительским) конструктором. Можно использовать его напрямую. Конструктор всё же вызывается, но это может быть конструктор класса Object.

Unsafe.allocateInstance – непосредственно создает экземпляр не вызывая конструктор, ничего лишнего.

Оба способа позволяют создать объект, не вызван ни конструктор, ни инициализаторы полей. Все члены остаются со значениями по-умолчанию (null, 0, false). Однако для final поля дефолтным значением считается указанное в инициализации, оно и будет установлено.

Пользуясь этими грязными хаками, помните: пакеты sun.* никогда не были частью официально поддерживаемого API Java, и есть не во всех версиях Java.


Java Guru🤓 #java
  • 🔥 3
  • 👍 1
More from @javatasks
  1. Oct 13, 2026Post #3928
  2. Oct 13, 2026Post #3927
  3. Oct 13, 2026👩‍💻 Spring Boot под нагрузкой: почему сервис работает локально и падает в production При…
  4. Oct 13, 2026Post #3925
  5. Oct 13, 2026Post #3924
  6. Oct 13, 2026Post #3923
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →