Я оставляю это здесь для пояснения, так как ОП не сказал, каков ожидаемый результат.
Следующий пример работает, потому что он использует горячую точку jvm.
public class Exceptional{
public static void main(String[] args){
String a = null;
try{
System.out.println(a.length());
} catch (Exception e){
System.out.println(e.getMessage());
}
}
}
Это почти та же самая программа, за исключением того, что она просто показывает сообщение.
~/local/jdk-14+36/bin/java Exceptional.java
null
При запуске с дополнительным аргументом.
~/local/jdk-14+36/bin/java -XX:+ShowCodeDetailsInExceptionMessages Exceptional.java
Невозможно вызвать "String.length ()", так как "" имеет значение null
Аргумент также влияет на трассировку стека в горячей точке jvm.
При запуске без дополнительного аргумента:
Исключение в потоке "main" java .lang.NullPointerException в Exceptional.main (Exceptional. java: 6)
И запустить с аргументом:
Исключение в потоке "main" java .lang.NullPointerException: Невозможно вызвать "String.length ()", потому что "" равно нулю at Exceptional.main (Exceptional. java: 6)
Я неправильно думал, что трассировка стека может не измениться, поскольку она уже содержит дополнительную информацию о коде. Как указывает другой ответ, это ошибка, которая устраняется в openj9 jvm.