Static Funktionen lädt Objektreferenz auf Stack, wenn nicht mit <Klassenname>.<Methodenname> aufgerufen #296
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Beispiel-Code
Datei
Test.jav
Datei
Main.java
Wenn Test.jav entsprechend mit javatx und Main.java mit javac kompiliert wird, schlägt die Ausführung in der JVM fehl.
Das Problem scheint falsch generierter Bytecode zu sein.
Bytecode für Methode
exec()
Die statische Methode führt aload_0 aus, sie hat aber weder Parameter, noch eine Referenz auf das aktuelle Objekt (da static).
Wenn der Quellcode der Klasse Test insofern angepasst wird, dass die statische Methode
foo()
explizit mit dem Klassenname aufgerufen wird, scheint das Problem (warum auch immer) nicht aufzutreten.Datei
Test.jav
mit explizitem Aufruf der statischen Methodefoo()
Bytecode für Methode
exec()
für neuen QuellcodeDann lässt sich der Code auch korrekt auf der JVM ausführen.