2011-12-01 8 views
9

Czy można rzucić wyjątek bez łapania go?wyjątek odrzucający java bez łapania go?

Przykład

public void foo() throws SomeException{ 
    // .... 
    if (somethingCatestrophic) throw new SomeException(); 
    // .... 
} 

Teraz chcę wywołać foo, ale nie chce się złapać jakieś błędy, jako wyjątki nie powinny były wyrzucane w czasie działania (o ile nie jest to bug)

+0

Czy jest jakiś powód, dla którego nie chcesz go złapać? Jeśli chodzi o wydajność, o ile mi wiadomo, nie ma wielkiej różnicy przechodząc przez blok try-catch, JEŻELI wyjątek nie jest faktycznie rzucany, to jest mnóstwo narzutów. Ale jeśli błąd jest katastrofalny –

+0

Nie, ponieważ błąd nie może się zdarzyć (tj. Błąd programowania lub wyjątki czasu wykonywania). – Pwnna

+0

Ups, wysłałem powyższe informacje przed zakończeniem. Cóż, błędy nigdy nie są "przypuszczalne"! Ale wygląda na to, że popełniasz błąd z powodu tego. Myślę, że musisz przemyśleć, czy chcesz rzucić błąd na pierwszym miejscu. –

Odpowiedz

28

Jeśli nie jest to coś, co planujesz i odzyskujesz z lokalnie, prawdopodobnie najlepiej w tym przypadku użyć niezaznaczonego wyjątku, np. Pochodnej RuntimeException.

+2

Dzięki! Jest to pomocne przy pisaniu niepoprawnego kodu, w którym mogę mieć wyjątek, który NIE powinien się zdarzyć, ale jest po to, aby powiadomić innego programistę, że zapomniał czegoś w swoim kodzie. –

1

Ty możliwe, unikaj wychwytywania wyjątków, ale jeśli wystąpi wyjątek i nie zostanie on przechwycony, Twój program zakończy wykonywanie (awarię).

Nie ma sposobu, aby zignorować wyjątek. Jeśli twoja aplikacja nie musi nic robić w odpowiedzi na dany wyjątek, to po prostu ją złapiesz, a potem nic nie zrobisz.

try { 
    ...some code that throws an exception... 
} catch (SomeException ex) { 
    // do nothing 
} 

UWAGA: Jest to często uważany za zły styl i ludzie mogą Ci o tym powiedzieć. Często wymienianym powodem jest to, że nawet jeśli nie zamierzasz nic zrobić z wyjątkiem, w większości przypadków powinieneś przynajmniej go gdzieś zalogować, powiadomić użytkownika lub podjąć inne odpowiednie działania w zależności od tego, jaka aplikacja jest używana. i co spowodowało wyjątek. Jeśli nie masz pewności, dlaczego zgłaszany jest wyjątek (może to błąd, którego jeszcze nie rozwiązałeś), z reguły powinieneś go przynajmniej zarejestrować, abyś mógł go później zrozumieć.

+0

Okazuje się, że potrzebny jest wyjątek RuntimeException, ponieważ błąd nigdy nie powinien się zdarzyć (wyjątek nigdy nie powinien zostać zgłoszony, chyba że wystąpi błąd w kodzie), o którym całkowicie zapomniałem – Pwnna

0

Jeśli sprawdzony wyjątek to SomeException, metoda wywołująca foo() będzie albo musiała wychwycić ten wyjątek i poradzić sobie z nim, albo też zostać ogłoszona, aby rzucić SomeException lub jego rodzica.

Jeśli SomeException jest wyjątkiem czasu wykonywania, metody, które go wywołują, nie będą musiały go przechwytywać.

1

Dlaczego nie złapiesz go w metodzie?

Po prostu użyj catch catch i kontynuuj, jeśli wyjątek jest nieistotny i nie ma wpływu na zachowanie twojego programu.

+0

Tak, całkowicie zapomniałem o RuntimeException. (W trybie python.) – Pwnna

Powiązane problemy