NullPointerException в коде, созданном с помощью ассемблера jasmin bytecode - PullRequest
0 голосов
/ 30 ноября 2018

Этот код вызывает исключение 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 Ответ

0 голосов
/ 30 ноября 2018

Это скомпилируется с кодом 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, чтобы этот код работал.

...