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 чтобы этот код работал.

Другие вопросы по тегам