2013-02-21 19 views
6

Ogólnie istnieją dwa sposoby postępowania z wyjątkami w Javie.Dlaczego wyjątek RuntimeException nie wymaga jawnej obsługi wyjątku?

  1. dodawania rzuca oświadczenie podpisu metody
  2. Surround z bloku try/catch.

Jednak zauważyłem, że niektóre wyjątki, szczególnie te, które dziedziczą po RuntimeException, nie wymagają tak jawnej obsługi wyjątku.

Na przykład, stworzyłem metodę próbkowania jak poniżej i napisem „Nie konieczne” dla tych, które nie wymagają wyraźnej obsługę wyjątków.

public void textException(){ 
    int i = (new Random()).nextInt(100); 

    switch (i){ 
    case 1: 
     throw new NullPointerException(); //Not required 
    case 2: 
     throw new NumberFormatException(); //Not required 
    case 3: 
     throw new RuntimeException();  //Not required 
    case 4:   
     throw new ClassNotFoundException(); //Required 
    case 5: 
     throw new IOException();   //Required 
    case 6: 
     throw new Exception();    //Required 
    default: 
     return; 
    } 
} 

zauważyłem, że RuntimeException dziedziczy z Exception.

Dlaczego nie trzeba jednoznacznie przechwytywać kodu RuntimeException, a inne Exceptions zrobić?

+3

Ci nazywane są sprawdzone i niekontrolowany wyjątki w Javie. A te były omawiane wiele razy w SO spojrzeć http://stackoverflow.com/questions/6115896/java-checked-vs-unchecked-exception-explanation –

+0

Metoda nie jest wymagane, aby zadeklarować w jego rzutów klauzula żadnych podklasy RuntimeException które mogły zostać rzucone podczas wykonywania metody, ale nie zostały przechwycone. – sudmong

Odpowiedz

1

Dla Java, RuntimeException jest uważana za wyjątek systemu, ogólnie, to nie do odzyskania, więc nie trzeba dodawać rzuca oświadczenie o sposobie lub używać bloku try catch go obsłużyć. Jednak wyjątek jest uważany za wyjątek aplikacji, dlatego można go odzyskać.

Powiązane problemy