Dlaczego posiadanie wyjątków Runtime Exit UnChecked (w przeciwieństwie do tego, czy były sprawdzane)?Dlaczego wyjątki Runtime "są odznaczone" w Javie?
Odpowiedz
Jeśli nie, będziesz musiał mieć bloki try/catch za każdym razem, gdy uzyskasz dostęp do elementu tablicy, wykonałeś operację podziału i wiele innych typowych scenariuszy.
Ujmując to w inny sposób, wyobrazić ten kod:
Map map = ...
int i = ...
(int[])map.get("foo")[3] = 2334/i;
musiałby sprawdzić ClassCastException
, ArrayIndexOutofBoundsException
, ArithmeticException
, UnsupportedOperationException
i NullPointerException
tuż przy mojej głowie.
Z Javą problem nie jest odznaczony wyjątków. Sprawdzone wyjątki są bardzo kontrowersyjnym tematem. Niektórzy twierdzą, że był to w dużej mierze eksperyment z Javą i w praktyce nie działają, ale znajdziesz wielu ludzi, którzy twierdzą, że są dobrzy.
Nikt nie twierdzi, że niezaznaczone wyjątki są złe.
Oznacza to po prostu, że kompilator nie będzie zmuszał do szukania wyjątku, ale nadal można go wyrzucić w środowisku wykonawczym. Jedną z korzyści jest to, że możesz rzucić nowe wyjątki ze swoich klas, nie wymagając od ciebie zmiany interfejsu, co powoduje, że dzwoniący zmieniają swój kod.
Pomysł na dwa rodzaje wyjątków w Javie (zaznaczone i niezaznaczone) polega na tym, że sprawdzane wyjątki powinny być stosowane w przypadku warunków błędu, których można rozsądnie oczekiwać, a niesprawdzone wyjątki powinny być używane w przypadku nieoczekiwanych błędów.
Na przykład, jeśli plik nie zostanie znaleziony, otrzymasz numer FileNotFoundException
i można oczekiwać, że twój program będzie w stanie obsłużyć taki warunek. Niezaznaczone wyjątki powinny być używane tylko w przypadku problemów, które nie powinny się zdarzyć, a to naprawdę oznacza, że w programie wystąpił błąd, jeśli wystąpi taki problem. Na przykład: NullPointerException
oznacza, że program próbuje wyłuskać zmienną o wartości null
i najprawdopodobniej jest to błąd.
Kompilator Java zmusza programistę do obsługi sprawdzanych wyjątków. To sprawia, że język programowania jest bezpieczniejszy - oznacza to, że programista zmuszony jest pomyśleć o warunkach błędu, co powinno zwiększyć niezawodność programu.
Kompilator nie sprawdza niezaznaczonych wyjątków, ponieważ niezaznaczone wyjątki nie powinny się zdarzyć, a jeśli tak się stanie, nie ma niczego, co program mógłby racjonalnie robić w czasie wykonywania; programista musi rozwiązać problem.
Ta funkcja została poddana krytyce w Javie, niektórzy nawet sprawdzają wyjątki sprawdzane pod numerem a failed experiment i niektórym osobom propose to remove checked exceptions z Java.
+1 za to czysty opis. – Reuben
"Nikt nie twierdzi, że niezaznaczone wyjątki są złe" - zdziwiłbyś się :-) Duży +1 na wszystko inne. – ChssPly76
dzięki @cletus. – Moeb
W rzeczywistości, jeśli sprawdzono wyjątek środowiska Runtime Exception, to i tak ciężko by było obsłużyć wyjątki, ponieważ prawie wszystko, co można zrobić w bloku catch, mogło spowodować nowe wyjątki środowiska wykonawczego, które z kolei musiałyby zostać obsłużone ... –