Sprawdzony wyjątek vs wyjątek czasu wykonywania
Wyjątkami są specjalne typy zdarzeń, które mogą zakłócać normalny przebieg programu. Wyjątek od nazwy pochodzi od „wyjątkowego wydarzenia”. Zgłoszenie wyjątku to proces tworzenia obiektu wyjątku i przekazania go do systemu wykonawczego. Gdy system wykonawczy otrzyma obiekt wyjątku, spróbuje znaleźć kogoś, kto poradzi sobie z nim w stosie wywołań, przechodząc przez niego w odwrotnej kolejności (w której wywołano metody). System wykonawczy działa pomyślnie, jeśli znajdzie metodę z obsługą wyjątków. Moduł obsługi wyjątków to blok kodu, który może oficjalnie obsłużyć wspomniany wyjątek. Jeśli system wykonawczy znajdzie odpowiedni moduł obsługi, przekaże obiekt wyjątku do modułu obsługi. Nazywa się to wyłapywaniem wyjątku. Jeśli jednak wyjątek nie zostanie obsłużony, program zostanie zakończony. W Javie wyjątki dziedziczą po klasie Throwable. Zaznaczone wyjątki to wyjątki, na których kompilator wymusza obsługę. Wyjątki środowiska wykonawczego są rodzajem wyjątków, które nie są sprawdzane przez kompilator.
Co to jest sprawdzony wyjątek?
Sprawdzone wyjątki to obiekty klasy java.lang.exception lub jej podklasy (z wyjątkiem java.lang.RuntimeException i jego podklas). Sprawdzone wyjątki są „sprawdzane” w czasie kompilacji. Oznacza to, że programista musi albo złapać lub wyrzucić te wyjątki, albo kompilacja narzeka (powodując błąd kompilatora). Z tego powodu wiele sprawdzonych wyjątków jest bardzo dobrze znanych programistom. Na przykład wyjątek IOException i jego podklasy są sprawdzane w wyjątkach i za każdym razem, gdy programista zajmuje się dostępem do pliku lub modyfikowaniem go, kompilator sprawdza, czy programista dba o wszystkie możliwe wyjątki IOException.
Co to jest wyjątek czasu wykonywania?
Wyjątki środowiska wykonawczego składają się z java.lang.RuntimeException i wszystkich jego podklas. Teoretycznie służą one do tego samego celu, co sprawdzone wyjątki, i mogą być zgłaszane lub obsługiwane jak sprawdzony wyjątek, ale kompilacja nie wymusza ich obsługi. Dlatego wyjątki środowiska wykonawczego należą do rodziny niesprawdzonych wyjątków. NullPointerException, NumberFormatEception, ClassCastException i ArrayIndexOutOfBoundsException są typowymi wyjątkami środowiska wykonawczego w Javie.
Jaka jest różnica między sprawdzonym wyjątkiem a wyjątkiem czasu wykonywania?
Chociaż zarówno sprawdzone wyjątki, jak i wyjątki środowiska wykonawczego są niepożądanym wystąpieniem podczas wykonywania programu, różnią się między sobą. Sprawdzona obsługa wyjątków jest wymuszana przez kompilator, ale wyjątki czasu wykonywania nie są. Dlatego sprawdzone wyjątki muszą być zgłaszane lub obsługiwane w celu skompilowania kodu, ale nie ma takiego wymogu dotyczącego wyjątków czasu wykonywania. W związku z tym wyjątki czasu wykonywania należą do niezaznaczonej kategorii wyjątków wraz z błędami.
Wadą sprawdzonych wyjątków jest to, że programista musi sobie z tym poradzić, nawet jeśli nie wie, jak to zrobić. Tak więc, jeśli programista po prostu zgłasza nowy wyjątek bez owijania oryginału, ślad stosu należący do oryginalnego wyjątku zostanie utracony. Tutaj przydają się wyjątki czasu wykonywania. Ponieważ wszystkie wyjątki czasu wykonywania można obsłużyć w jednym miejscu, dlatego programiści mogą pisać mniej kodu. Z drugiej strony, ponieważ należy wychwycić sprawdzone wyjątki, programista nie jest zaskoczeniem. Zawsze będzie wiedziała, który sprawdzony wyjątek może zostać zgłoszony za pomocą określonej metody. W przeciwieństwie do tego, różne wyjątki czasu wykonywania mogą być zgłaszane bez wiedzy programisty.