Zrozumienie hierarchii wyjątków w języku Java — wyjaśnienie

Opublikowany: 2022-03-08

Termin „Wyjątek” jest skrótem od „wyjątkowego wydarzenia”. W Javie Wyjątek jest zasadniczo zdarzeniem, które występuje podczas wykonywania programu i zakłóca normalny przepływ programu. Wyjątki są niechciane i przeważnie nieoczekiwane, które zazwyczaj pojawiają się w czasie wykonywania lub kompilacji. Wszystkie te wyjątki muszą być obsługiwane, aby zapewnić, że program działa w swoim naturalnym przepływie.

Jednak zanim zaczniesz obsługiwać wyjątki, warto wiedzieć, jakie rodzaje wyjątków są obecne w Javie. W tym artykule przyjrzyjmy się różnym typom wyjątków w Javie i hierarchii wyjątków, za którą się stosują.

Spis treści

Hierarchia wyjątków w Javie

Hierarchia wyjątków w języku programowania Java zaczyna się od klasy Throwable – która pochodzi z klasy Object i jest jej bezpośrednią podklasą, podczas gdy klasa Exception przedstawia wszystkie klasy This Throwable dalej rozgałęzia się na dwie podklasy – Error i Exception. Oto schemat blokowy, który pozwala lepiej zrozumieć hierarchię wyjątków Java:

Klasa Exception przedstawia wszystkie wyjątki, które mogą być potrzebne podczas pracy z językiem programowania Java. Niektóre powszechnie znane i spotykane przykłady takich wyjątków to NullPointerException, ClassNotFoundException, IllegalArgumentException itp.

Z drugiej strony klasa Error zajmuje się poważniejszymi problemami w architekturze programu Java i nie jest uwzględniona w kodzie aplikacji. Niektóre przykłady błędów w Javie to InternalError, AssertionError, OutOfMemoryError itp.

Wyjątki w Javie dzielą się na dwie kategorie:

  • Sprawdzone wyjątki — są one również znane jako wyjątki czasu kompilacji.
  • Niesprawdzone wyjątki — są one również nazywane wyjątkami środowiska uruchomieniowego.

Ważnym punktem, na który należy zwrócić uwagę w tym momencie, jest to, że niesprawdzone Wyjątki to wszystkie podklasy klasy RuntimeException. Więcej o zaznaczonych i niesprawdzonych wyjątkach omówimy w dalszej części tego artykułu. Ale wcześniej przyjrzyjmy się zasadniczo, jak błędy i wyjątki różnią się w działaniu, aby nie było zamieszania.

Błędy i wyjątki w Javie – czym się różnią?

Oficjalna dokumentacja języka programowania Java odnosi się do błędów jako zdarzeń podczas programowania w języku Java, które – „wskazują na poważne problemy, których rozsądna aplikacja nie powinna próbować wyłapywać”. Powaga Błędów jasno wynika ze sposobu, w jaki sformułowane jest to stwierdzenie. Oczywiście odnosi się to do zestawu problemów, z którymi może się zmierzyć Twój program, a których naprawienie nie jest możliwe bez refaktoryzacji kodu lub modyfikacji architektury aplikacji Java.

Spójrzmy na metodę Javy, która zgłosi błąd:

public static void print(String S) {

nadruk(S);

}

We wspomnianym powyżej kodzie metoda print() działa jako metoda rekurencyjna, która wielokrotnie wywołuje siebie, w kółko, aż osiągnie maksymalny dozwolony rozmiar stosu wątków w Javie. W tym momencie kończy wykonywanie z bardzo powszechnym — StackOverflowError, który brzmi mniej więcej tak:

Wyjątek w wątku „głównym” java.lang.StackOverflowError

w StackOverflowErrorExample.print(StackOverflowErrorExample.java:3)

Jak pokazuje powyższy przykład, metoda rzuca przykład, ale tego błędu nie można obsłużyć w samym kodzie. Tak więc program po prostu kończy wykonywanie, ponieważ uszkodzenie jest nieodwracalne. Jako rozwiązanie należy zmodyfikować kod.

W przeciwieństwie do błędów, wyjątki wskazują warunki, które mogą zostać wychwycone przez rozsądną aplikację. Wyjątki w Javie obejmują problemy, które mogą wystąpić w czasie kompilacji lub w czasie wykonywania. Te wyjątki zdarzają się dość często we wszystkich aplikacjach – zwłaszcza w fazie testowania i debugowania. W rezultacie wyjątki w Javie mogą być obsługiwane w samym programie, aby zapewnić naturalny przepływ kodu.

Porozmawiajmy teraz nieco więcej o hierarchii wyjątków w Javie, przyglądając się, czym są zaznaczone i niesprawdzone wyjątki.

Sprawdzone i niesprawdzone wyjątki w Javie

Jak wspomniano wcześniej, wyjątki w programie Java mogą wystąpić w czasie kompilacji lub w czasie wykonywania. To daje nam dwa szerokie typy wyjątków obecne w Javie. Oto szczegółowe omówienie tych dwóch wyjątków.

Wyjątki czasu kompilacji

Wyjątki, które występują w czasie kompilacji, są znane jako wyjątki czasu kompilacji. Są one również nazywane sprawdzonymi wyjątkami, ponieważ musisz je jawnie sprawdzić w swoim programie Java i obsłużyć je w samym kodzie. Klasy takie jak InterruptedException, IOException i inne są sprawdzonymi wyjątkami.

Spójrzmy na metodę, która może obsłużyć sprawdzony wyjątek:

public void writeAFile() {

spróbuj (BufferedWriter b_w = new BufferedWriter(new FileWriter(“myFile.txt”))) {

b_w.write(„Testowanie”);

} catch (IOException ioe) {

ioe.printStackTrace();

}

}

Jak widać, w bloku try w powyższym kodzie znajdują się dwie instrukcje –

  • Tworzenie instancji obiektu – BufferedWriter
  • Używanie obiektu do zapisu do pliku

Obie te instrukcje mogą zgłosić IOException. IOException, będący sprawdzonym wyjątkiem, musi być obsługiwany przez obiekt wywołujący lub metodę. W powyższym przykładzie widać, że wyjątek jest obsługiwany w samej metodzie.

Wyjątki w czasie wykonywania

W przeciwieństwie do wyjątków czasu kompilacji, które są zgłaszane w czasie kompilacji, wyjątki w czasie wykonywania lub niesprawdzone wyjątki mogą być zgłaszane „w dowolnym momencie”, co zasadniczo oznacza w czasie wykonywania. W rezultacie metody nie muszą jawnie używać bloków catch-and-throw do obsługi tych niesprawdzonych wyjątków. Niektóre z klas, które dziedziczą niesprawdzone wyjątki środowiska wykonawczego, to – NullPointerException, ArithmeticException itp.

Przyjrzyjmy się fragmentowi kodu Java, który zgłasza niezaznaczony wyjątek NullPointerException i który nie jest obsługiwany w tym fragmencie kodu, jak wcześniej. Oto on:

public void zapiszDoPlik() {

spróbuj (BufferedWriter b_w = null) {

b_w.write(„Test”);

} catch (IOException ioe) {

ioe.printStackTrace();

}

}

Po wywołaniu powyższej metody program zgłosi NullPointerException, ponieważ obiekt BufferedWriter ma wartość null. Oto jak wyglądałoby wyjątek:

Wyjątek w wątku „główny” java.lang.NullPointerException

w IOExceptionExample.writeToFile(IOExceptionExample.java:10)

pod adresem IOExceptionExample.main(IOExceptionExample.java:17)

Na zakończenie

Na tym kończymy ten blog dotyczący zrozumienia hierarchii wyjątków w Javie. Należy pamiętać, że w żadnym wypadku nie jest to wyczerpujące omówienie wyjątków w Javie i sposobów ich obsługi. W tym celu powinieneś kopać głębiej i wystawiać się na różne możliwe wyjątki, aby zobaczyć, jak działają. Znajomość obsługi wyjątków zapewni Ci udaną karierę jako pełnoprawny programista, ponieważ wyjątki stanowią podstawę każdej aplikacji.

W upGrad mamy specjalistyczny kurs rozwoju pełnego stosu – Executive PG Program w tworzeniu oprogramowania – Specjalizacja w tworzeniu pełnego stosu – podczas którego przeprowadzimy Cię przez wszystkie niuanse tworzenia oprogramowania, koncentrując się głównie na rozwoju Full Stack. Sugerujemy zapoznanie się z kursem i prawdopodobnie rezerwację miejsca wkrótce!

1. Która klasa znajduje się na górze hierarchii wyjątków w Javie?

Klasa Throwable znajduje się na szczycie hierarchii wyjątków w Javie.

2. Jakie rodzaje wyjątków występują w Javie?

Java ma odznaczone, a także sprawdzone wyjątki. Sprawdzone wyjątki są również nazywane wyjątkami czasu kompilacji, podczas gdy niesprawdzone wyjątki są również znane jako wyjątki czasu wykonywania.

3. Jak obsługiwane są wyjątki w Javie?

Try-catch to najłatwiejszy sposób obsługi wyjątków w Javie. Główny fragment kodu, który chcesz uruchomić, należy umieścić w bloku try, podczas gdy jeden lub więcej bloków catch przechwyci wszystkie wyjątki zgłaszane przez kod. Ta metoda wykryje każdy typ wyjątków Java, które zostaną zgłoszone.