class ThrowNull {
public static void main(String[] args) {
throw null;
}
}
Wiadomo, że zasadą throw jest throw ThrowableInstance
, gdzie ThrowableInstance
musi być obiektem typu Throwable
lub podklasą Throwable
. Proste typy, takie jak int lub char, a także klasy nieobjęte Throwable, takie jak string i object , nie mogą być używane jako wyjątk, inull to specjalny literał Java, który reprezentuje wartość zerową.
Dlaczego więc w tym przypadku nie powoduje to błędu kompilacji? będę wdzięczny za pomoc :) Pozdrawiam
2 odpowiedzi
Zgodnie ze specyfikacją języka (https://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.18) instrukcja throw jest zdefiniowana jako:
throw Expression
I jeśli wyrażenie ma wartość null, generowany jest wyjątek NullPointerException. Ponieważ NullPointerException rozszerza RuntimeException, jest to niesprawdzony wyjątek. To może wyjaśniać, dlaczego nie ma błędu kompilacji .
Zgodnie ze specyfikacją języka (https://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.18) instrukcja throw jest zdefiniowana jako:
throw Expression
I jeśli wyrażenie ma wartość null, generowany jest wyjątek NullPointerException. Ponieważ NullPointerException rozszerza RuntimeException, jest to niesprawdzony wyjątek. To może wyjaśniać, dlaczego nie ma błędu kompilacji .