Zrozumienie hierarchii wyjątków w języku Java — wyjaśnienie
Opublikowany: 2022-03-08Termin „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.