Dlaczego „throw null” nie powoduje błędu kompilacji w Javie?

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 .

Twoja odpowiedź

Zaloguj się aby odpowiedzieć.

Operiada

Operiada to polskojęzyczne forum informatyczne działające na zasadzie pytań i odpowiedzi.

Obserwowane tagi

Zaloguj się aby obserwować tagi.