2013-04-12 18 views
21

Na przykład:Java: Czy rzucanie wyjątku zabija jego metodę?

public String showMsg(String msg) throws Exception { 
    if(msg == null) { 
     throw new Exception("Message is null"); 
    } 
    //Create message anyways and return it 
    return "DEFAULT MESSAGE"; 
} 

String msg = null; 
try { 
    msg = showMsg(null); 
} catch (Exception e) { 
    //I just want to ignore this right now. 
} 
System.out.println(msg); //Will this equal DEFAULT MESSAGE or null? 

ja, która chciałaby zasadniczo ignorować wyjątki w niektórych przypadkach (zwykle, gdy wiele wyjątki mogą być wyrzucane z metody i nie ma znaczenia w danym przypadku), więc mimo żałosne przykład którego użyłem dla uproszczenia, czy powrót w showMsg nadal działa, czy też rzut rzeczywiście zwraca metodę?

+3

Twój kod pokazuje już, co robi rzut. –

+1

Unikaj rzucania wyjątków 'new', traci stos wywołań. –

+0

@jahroy Nie sądzę, w końcu bloki uruchomić nawet po wyjątku –

Odpowiedz

34

Instrukcja return będzie nie uruchomiona, jeśli zostanie zgłoszony wyjątek. Zgłoszenie wyjątku powoduje, że przepływ kontrolny programu przechodzi natychmiast do obsługi wyjątku (*), pomijając wszystko inne na drodze. Więc w szczególności msg będzie null w Twojej instrukcji print, jeśli wyjątek został zgłoszony przez showMsg.

(*) Z wyjątkiem tego, że będą uruchamiane bloki w blokach finally, ale nie ma to znaczenia tutaj.

+5

Innym _exception_ do reguły (gra słów nie jest przeznaczona) byłoby, gdyby metoda, o której mowa, powodowała wyjątek. Możesz _can_ jawnie rzucić wyjątek w bloku try i przechwycić go w odpowiednim bloku catch. Biorąc to pod uwagę, twoja odpowiedź prawdopodobnie pokrywa się z tym scenariuszem z wyborem słów: "_... powoduje, że przepływ kontrolny przechodzi od razu do wyjątku ** handler **". – jahroy

Powiązane problemy