Ich wundere mich, warum die Exception im folgenden Bytecode (um eine Ausnahme auszulösen) dupliziert wird.
%Vor%Ich werde das Zeile für Zeile analysieren, wobei [] = neuer Stapel nachdem das Op verwendet wurde:
IllegalArgumentException
auf den Stapel [SomeIllegalArgumentException] ein
Im Byte-Code wird zuerst ein Objekt von der Klasse erstellt, und dann wird ein Konstruktor für dieses Objekt aufgerufen. Die Signatur eines Konstruktors endet mit V
für void
, da nichts zurückgegeben wird. Dies bedeutet, dass eine Kopie der ursprünglichen Referenz auf das Objekt auf dem Stapel (oder in einer Variablen) aufbewahrt werden muss, damit sie nach dem Aufruf des Konstruktors ausgelöst werden kann.
BTW Der interne Name für einen Konstruktor lautet <init>
und der interne Name für einen statischen Initialisierungscode lautet <clinit>