Исключение NullPointerException при загрузке класса

59
10

Следующий код дает NullPointerException:

badOb = Class.forName("sample");
try {
Object obj = badOb .newInstance();
} catch (ThreadDeath e) {
throw e;
} catch (Throwable e) {
if (expectedException.isInstance(e)) {
out.println("Expected runtime exception: " + e);
return 0;
} else {
out.println("Unexpected runtime exception: " + e);
return 1;
}
}

Но когда я добавляю оператор печати, например:

 badOb = Class.forName("sample");
out.println("hello");
try {
Object obj = badOb .newInstance();
} catch (ThreadDeath e) {
throw e;
} catch (Throwable e) {
if (expectedException.isInstance(e)) {
out.println("Expected runtime exception: " + e);
return 0;
} else {
out.println("Unexpected runtime exception: " + e);
return 1;
}
}

Он работает нормально и дает ожидаемое исключение.

Я проверил, и объект badob не является NULL. Когда я смотрю на байт-код, следующие строки добавляются при добавлении оператора печати:

aload_3        
ldc #19; //String hello
invokevirtual #1

Может ли кто-нибудь помочь мне разобраться в этом?

Моя среда java:

 java version "1.5.0"
Java(TM) 2 Runtime Environment, Standard Edition

Изменить: он также работает так, как ожидалось, если я представлю задержку на несколько секунд вместо инструкции печати.

спросил(а) 2016-01-19T09:01:00+03:00 4 года, 8 месяцев назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема