2016-04-24 4 views
1

erstellt wird, habe ich gelesen, auf Java-Objekt Deserialisieren und kam zu wissen, dass,Wie Instanz ohne Aufruf Konstruktor in Java

Während Java-Objekt deserialisiert, wenn etwa den serializable-Schnittstelle implementiert, dann eine Instanz der Klasse ohne Aufruf erstellt es ist Konstruktor.

Durch diese link kam ich zu wissen, Java verwendet sun.reflect.ReflectionFactory newConstructorForSerialization() -Methode zum Erstellen neuer Instanz der Klasse ohne Aufruf Konstruktor.

Wird ein völlig neuer Konstruktor für den Deserialisierungsprozess erstellt?

Ich möchte wissen, wie Objekt erstellt wird, ohne seinen Konstruktor aufzurufen. Wie diese Methode tatsächlich funktioniert, kann jemand bitte in einfachen Worten erklären.

Antwort

1

In Java-Bytecode ist der Konstruktor tatsächlich eine Methode, die Sie für ein bereits erstelltes Objekt aufrufen. Wenn Sie also Bytecode schreiben, können Sie einfach den zweiten Schritt überspringen.

Tatsächlich gibt es viele Kontrollflusskonstrukte, die Sie in Bytecode ausdrücken können, aber Sie können nicht in Java-Quellcode schreiben.

Intern ist die Java-Serialisierung in die JVM integriert, so dass sie beliebige Regeln umgehen kann.

Dies unterstreicht lediglich den Unterschied zwischen der Programmiersprache Java (wobei new immer den Konstruktor aufruft) und Java der Plattform (wobei NEW ein Opcode ist, der eine unkonstruierte Instanz des gewünschten Typs auf den Stack schiebt).