Zaznaczony wyjątek a wyjątek czasu wykonywania
Wyjątkiem są zdarzenia specjalnego typu, które mogą zakłócić normalny przebieg programu. Nazwa wyjątek 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 obsłuży go w stosie wywołań, przechodząc przez niego w odwrotnej kolejności (w jakiej zostały wywołane metody). System wykonawczy powiedzie się, jeśli znajdzie metodę z obsługą wyjątków. Procedura 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ą procedurę obsługi, przekaże do niej obiekt wyjątku. Nazywa się to przechwytywaniem wyjątku. Jeśli jednak nie można obsłużyć wyjątku, program zakończy działanie. W Javiewyjątki dziedziczą z klasy Throwable. Zaznaczone wyjątki to wyjątki, których obsługa jest wymuszana przez kompilator. Wyjątki środowiska uruchomieniowego to wyjątki, które nie są sprawdzane przez kompilator.
Co to jest sprawdzony wyjątek?
Zaznaczone wyjątki to obiekty klasy java.lang.exception lub jej podklasy (z wyjątkiem java.lang. RuntimeException i jego podklas). Zaznaczone wyjątki są „sprawdzane” w czasie kompilacji. Oznacza to, że programista musi albo złapać, albo wyrzucić te wyjątki, w przeciwnym razie kompilacja będzie narzekać (powodując błąd kompilatora). Z tego powodu wiele zaznaczonych wyjątków jest bardzo dobrze znanych programistom. Na przykład IOException i jego podklasy są sprawdzanymi wyjątkami, a ilekroć programista ma do czynienia z dostępem lub modyfikacją pliku, kompilator sprawdza, czy wszystkie możliwe IOExceptions są obsługiwane przez programistę.
Co to jest wyjątek czasu wykonywania?
Wyjątki środowiska wykonawczego obejmują java.lang. RuntimeException i wszystkie jego podklasy. Teoretycznie służą temu samemu celowi, co sprawdzane wyjątki i mogą być zgłaszane lub obsługiwane jak sprawdzane wyjątki, ale ich obsługa nie jest wymuszana przez kompilator. Dlatego wyjątki Runtime należą do rodziny niezaznaczonych wyjątków. NullPointerException, NumberFormatEception, ClassCastException i ArrayIndexOutOfBoundsException to typowe wyjątki czasu wykonywania w języku Java.
Jaka jest różnica między zaznaczonym wyjątkiem a wyjątkiem czasu wykonywania?
Chociaż zarówno zaznaczone wyjątki, jak i wyjątki czasu wykonywania są niepożądanym wystąpieniem podczas wykonywania programu, mają swoje różnice. Obsługa sprawdzonych wyjątków jest wymuszana przez kompilator, ale wyjątki środowiska uruchomieniowego nie. Dlatego sprawdzone wyjątki muszą być zgłaszane lub obsługiwane, aby kod mógł się skompilować, ale nie ma takiego wymagania 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łosi nowy wyjątek bez zawijania oryginału, ślad stosu należący do oryginalnego wyjątku zostanie utracony. Tutaj przydają się wyjątki w czasie wykonywania. Ponieważ wszystkie wyjątki środowiska uruchomieniowego można obsłużyć w jednym miejscu, programiści mogą więc pisać mniejszą ilość kodu. Z drugiej strony, skoro sprawdzane wyjątki muszą zostać wychwycone, nie ma co się dziwić programisty. Zawsze będzie wiedziała, który zaznaczony wyjątek można wyrzucić daną metodą. W przeciwieństwie do tego, różne wyjątki czasu wykonywania mogą być zgłaszane bez wiedzy programisty.