NullPointerException в коде, созданном с помощью ассемблера jasmin bytecode
Этот код вызывает исключение java.lang.NullPointerException. Я пытаюсь скомпилировать немного кода для JVM, и это то, что выводит мой компилятор
.class public test
.super java/lang/Object
.field static i [I
.method public static main([Ljava/lang/String;)V
invokestatic test/main()V
return
.limit locals 1
.limit stack 20
.end method
.method public static main()V
.limit locals 8
getstatic test/i [I
ldc 1
ldc 5
iastore
return
.limit stack 20
.end method
Однако это не работает, и я могу выяснить, откуда исходит ошибка (номер строки не указан.)
Держу пари, что это неправильно хранит значение из глобального массива в строках
getstatic test/i [I
ldc 1
ldc 5
iastore
Мой вопрос, как это должно компилироваться
1 ответ
Решение
Это скомпилируется в код Java
public class Test {
static int[] i;
public static void main(String[] args) {
main();
}
public static void main() {
i[1] = 5;
}
}
Если вы скомпилируете и запустите это, вы увидите, что оно генерирует исключение NullPOinterException, потому что ничто не создает массив int для хранения в i
, Вам нужно создать int[]
объект измерения 2 (как минимум) с использованием newarray
чтобы этот код работал.