2016-04-24 7 views
1

Я прочитал на Десериализацию объекта Java и узнал, чтоКак экземпляр создается без вызова конструктора в Java

Хотя десериализации объекта Java, если экземпляр реализует сериализацию интерфейса, то экземпляр класса создаются без привлечения это конструктор.

Пройдя через это link, я пришел к выводу, что Java использует метод sun.reflect.ReflectionFactory newConstructorForSerialization() для создания нового экземпляра класса без вызова конструктора.

Создает ли он совершенно новый конструктор для процесса десериализации?

Я хочу знать, как создается объект, не вызывая его конструктор. Как этот метод действительно работает, может кто-то объяснить простым словам.

ответ

1

В байт-коде Java конструктор фактически является методом, который вы вызываете уже созданному объекту. Поэтому, если вы пишете байт-код, вы можете просто пропустить второй шаг.

На самом деле, есть много конструкций потока управления, которые вы можете выразить в байт-коде, но вы не можете писать в исходном коде Java.

Внутренне, сериализация Java встроена в JVM, поэтому она может обойти любые правила, которые ей нравятся.

Это только подчеркивает разницу между Java языком программирования (где new всегда вызывает конструктор) и Java платформа (где NEW является опкодом, что толкает Невыстроенный экземпляр нужного типа в стек).

Смежные вопросы