Obsługa wyjątków w Javie [z przykładami]
Opublikowany: 2020-11-12Wyjątki to niechciane i nieoczekiwane zdarzenia programu, które nigdy nie są pożądane przez programistę, ale muszą sobie z nimi radzić tak wiele razy. Jasną stroną jest to, że język Java zorientowany obiektowo umożliwia złagodzenie tych niepożądanych zdarzeń dzięki koncepcji zwanej „Obsługą wyjątków w Javie ”. Nie naprawia wyjątku, ale zapewnia alternatywny sposób radzenia sobie z nim.
Może istnieć wiele przyczyn wystąpienia wyjątków, w tym wprowadzenie błędnych danych, awaria sprzętu, awaria połączenia, awaria serwera itp. Dlatego obsługa wyjątków jest i zawsze będzie ważna w trakcie nauki Javy, ponieważ pomaga zapewnić normalną przepływ programu w momencie wystąpienia nieoczekiwanego zdarzenia. Ignorowanie wyjątków może spowodować awarię całego oprogramowania i utratę danych.
Teraz, gdy mamy już pomysł na wyjątki i ich obsługę, przyjrzyjmy się temu szczegółowo, a także zrozumiemy, jak Java pomaga w obsłudze wyjątków.
Przeczytaj: Pytania do wywiadu dotyczące obsługi wyjątków
Spis treści
Co to jest obsługa wyjątków?
Deweloper może przewidzieć wyjątki, które fragment kodu może zgłosić w czasie wykonywania. Jedną z najważniejszych rzeczy, co do której wielu uczących się ma niejasne, jest to, że wszystkie wyjątki występują w czasie wykonywania, a nie w czasie kompilacji. Java może obsługiwać wyjątki tylko w czasie wykonywania. Istnieją pewne słowa kluczowe używane w programie Java do tworzenia bloku obsługi wyjątków.
java.lang.Exception jest klasą nadrzędną wszystkich klas wyjątków. Klasa Exception jest podklasą wbudowanej klasy Throwable , która jest podklasą klasy Object . Oprócz Exception, Throwable ma również inną klasę, tj. Error, która jest nienormalnym stanem podczas wykonywania programu, który nie może być obsłużony przez programy Java, które są główną różnicą między Error i Exceptions.

Jak pokazano na powyższym rysunku, w Javie istnieją głównie dwie kategorie wyjątków. W następnej sekcji przyjrzymy się szczegółowo typom wyjątków w Javie.
Wyjątki Java
Głównymi przyczynami wyjątków są te spowodowane przez programistę lub zasoby fizyczne, które uległy awarii z jakichś powodów. Na tej podstawie istnieją głównie dwie kategorie wyjątków w Javie, jak poniżej, których szczegóły są przestrzegane:
- Sprawdzony wyjątek
- Niesprawdzony wyjątek
1. Sprawdzony wyjątek
Sprawdzone wyjątki są znane jako „wyjątki czasu kompilacji”, ponieważ są sprawdzane podczas kompilacji przez kompilator w celu monitorowania, czy wyjątek jest obsługiwany przez programistę. Następnie system wyświetla błąd kompilacji.
Niektóre przykłady tych wyjątków to IOException , Przeczytaj: Pomysły na projekty Java dla początkujących
2. Niesprawdzony wyjątek
Niesprawdzone wyjątki nazywane są „wyjątkami wykonawczymi”, ponieważ występują w czasie wykonywania programu. Niesprawdzone wyjątki są zwykle ignorowane podczas kompilacji i nie są sprawdzane.
Przykładami tych wyjątków mogą być błędy w programie, takie jak błędy logiczne lub użycie niepoprawnych interfejsów API, które nie są pod kontrolą programisty i wymagają naprawy przez administratora systemu.
Sprawdzony vs niesprawdzony wyjątek
Punkty różnicujące | Sprawdzony wyjątek Niesprawdzony wyjątek Czas obsługi | Sprawdzone wyjątki są sprawdzane i obsługiwane w czasie kompilacji. | Niezaznaczone Wyjątki nie są sprawdzane w czasie kompilacji. |
Identyfikacja wyjątków | Program zgłasza błąd kompilacji, jeśli metoda zgłasza sprawdzony wyjątek. | Program kompiluje się poprawnie, ponieważ kompilator nie może sprawdzić wyjątku. | |
Dziedzictwo | Nie dziedziczą klasy RuntimeException. | Są to podklasy klasy RuntimeException. | |
Rola programisty | Może być obsługiwany przez programistów. | Nie mogą być obsługiwane przez programistów. |
Zrozumienie wyjątków jest podstawowym krokiem przed ich obsługą.
Jak Java pomaga w obsłudze wyjątków?
Teraz, gdy wiemy, że w Javie istnieją dwa rodzaje wyjątków, a mianowicie zaznaczone i niezaznaczone. Jeśli metoda zgłasza sprawdzony wyjątek, należy go obsłużyć za pomocą bloku try-catch lub zadeklarować słowo kluczowe „ rzuty” , aby uniknąć błędu kompilacji w programie.
Przykład zaznaczonego wyjątku:
Jest to program do odczytu pliku o nazwie 'Java'. Istnieją trzy miejsca, w których zgłaszany jest sprawdzony wyjątek:
- FileInputStream: Służy do określania ścieżki i nazwy pliku throw FileNotFoundException .
- Metoda read(): odczytanie zawartości pliku wyrzuca IOException ;
iii. Metoda close(): Zamknięcie strumienia wejściowego pliku powoduje zgłoszenie IOException .
importuj java.io.*;
klasa Przykład {
public static void main( String args[])
{
FileInputStream fis = null ;
/*Konstruktor FileInputStream(Nazwa pliku)
* zgłasza sprawdzony wyjątek FileNotFoundException */
fis = new FileInputStream ( „B:/java.txt” );
int k;
/* Wyrzuca metodę read() klasy FileInputStream
* sprawdzony wyjątek: IOException
*/
while (( k = fis.read() ) != – 1 )
{
System . się . drukuj (( znak )k);
}
/*Metoda close() zamyka strumień wejściowy pliku
* zgłasza wyjątek IOException*/
fis.zamknij();
}
}
Wyjście powyższego programu:
Znaleziono wyjątek w wątku „main” java.lang. Błąd : Nierozwiązane problemy z kompilacją:
Znaleziono nieobsługiwany wyjątek FileNotFoundException
Znaleziono nieobsługiwany wyjątek IOException
Znaleziono nieobsługiwany wyjątek IOException
Przyczyna tego błędu kompilacji: Brak deklaracji lub obsługa wyjątków.
Koniecznie przeczytaj: Projekty Java GitHub
Metody obsługi wyjątków
Istnieją dwa sposoby obsługi wyjątków opisane poniżej:
Metoda 1: deklarowanie słowa kluczowego wyjątku „zgłasza”
W powyższym programie wszystkie trzy zaznaczone wyjątki znajdują się wewnątrz metody main(). Dlatego jednym ze sposobów uniknięcia błędu kompilacji jest zadeklarowanie wyjątku w metodzie za pomocą słowa kluczowego „throws”. Ponieważ IOException jest klasą nadrzędną FileNotFoundException, również to obejmie.
Zaktualizowany program za pomocą słowa kluczowego rzutów:
importuj java.io.*;
klasa Przykład {
public static void main( String args[]) wyrzuca IOException
{
FileInputStream fis = null ;
fis = new FileInputStream ( „B:/java.txt” );

int k;
while (( k = fis.read() ) != – 1 )
{
System . się . drukuj (( znak )k);
}
fis.zamknij();
}
}
Wyjście:
Wyświetl zawartość pliku na ekranie.
Metoda 2: Obsługa wyjątków przy użyciu bloków try-catch.
Jest to bardziej zaawansowane podejście do powyższego i jedna z najlepszych praktyk obsługi wyjątków . Zmieniony kod programu, w tym bloki try-catch, wygląda następująco:
importuj java.io.*;
klasa Przykład {
public static void main( String args[])
{
FileInputStream fis = null ;
spróbuj {
fis = new FileInputStream ( „B:/java.txt” );
} catch ( FileNotFoundException fnfe){
System . out .println( „Plik nie jest” +
„obecny na określonej ścieżce” );
}
int k;
spróbuj {
while (( k = fis.read() ) != – 1 )
{
System . się . drukuj (( znak )k);
}
fis.zamknij();
} catch ( IOException ioe){
System . out .println( „Błąd we/wy” +ioe);
}
}
}
Wyjście:
Ten kod w końcu wyświetli zawartość pliku.
Przykład niesprawdzonego wyjątku
Wyjątki Niesprawdzone nie są sprawdzane w czasie kompilacji. Program nie zgłosi błędu kompilacji, jeśli nie jest zadeklarowany lub obsłużony i będzie działał poprawnie. Zadaniem programisty jest przewidzenie warunków, które mogą wystąpić z wyprzedzeniem, powodując takie wyjątki i zajęcie się nimi. Wszystkie niesprawdzone wyjątki są podklasami klasy RuntimeException .
klasa Przykład {
public static void main( String args[])
{
int liczba1= 10 ;
int liczba2= 0 ;
/*Dzielenie dowolnej liczby przez 0
* Wyrzuci ArithmeticException
*/
int res=liczba1/liczba2;
System . out .println(res);
}
}
Kod zostanie pomyślnie skompilowany z tym kodem, ale w czasie wykonywania spowoduje zgłoszenie ArithmeticException , ponieważ niesprawdzone wyjątki nie są sprawdzane w czasie kompilacji. Spójrzmy na inny przykład.
klasa Przykład {
public static void main( String args[])
{
int arr[] ={ 1 , 2 , 3 , 4 , 5 };
/* Tablica ma 5 elementów, ale chcemy
* wyświetl wartość 8. elementu. Będzie rzucać
* ArrayIndexOutOfBoundsException
*/
System . out.println (arr[ 7 ]);
}
}
Ten kod zostanie również pomyślnie skompilowany, ponieważ ArrayIndexOutOfBoundsException jest niesprawdzonym wyjątkiem.
Tutaj, do obsługi niesprawdzonych wyjątków, powinien być wyświetlony komunikat o wyjątku, który chce wyświetlić, ale nie istnieje w tablicy.
Obsługa powyższego wyjątku kodu za pomocą bloku try-catch
klasa Przykład {
public static void main( String args[]) {
spróbuj {
int arr[] ={ 1 , 2 , 3 , 4 , 5 };
System . out.println (arr[ 7 ]);
}
catch ( ArrayIndexOutOfBoundsException e){
System . out .println( „Określony indeks nie istnieje” +
„w szyku”. );
}
}
}
Wyjście:
Podany indeks nie istnieje w tablicy.
Uwaga: W bloku try może znajdować się wiele bloków catch do obsługi różnych wyjątków.
Metoda 3 : Używanie słowa kluczowego „wreszcie”
Czasami zdarza się, że kod musi zostać wykonany, nawet jeśli wystąpi wyjątek. Tutaj używane jest ostatnie słowo kluczowe. Oto typowy kod ze słowem kluczowym „finally”.
public int getPlayerScore(String playerFile)
wyrzuca wyjątek FileNotFoundException {
Zawartość skanera = null;
próbować {
content = new Scanner( new File(playerFile));
return Integer.parseInt(contents.nextLine());
} wreszcie {
if (treść != null ) {
zawartość.zamknij();
}
}
}
Tutaj ostatni blok wskazuje kod, który ma uruchomić Java podczas próby odczytania pliku.
Nawet jeśli zostanie zgłoszony wyjątek FileNotFoundException , Java wywoła zawartość last .
Wyjątek możemy obsłużyć modyfikując kod jak poniżej:
public int PlayerScore(String playerRuns) {
Zawartość skanera;
próbować {
content = new Scanner(new File(playerRuns));
return Integer.parseInt(contents.nextLine());
} catch (FileNotFoundException noFile ) {
logger.warn("Nie znaleziono pliku.");
zwróć 0;
} wreszcie {
próbować {
if (treść != null) {
zawartość.zamknij();
}
} catch (IOException ioexc) {
logger.error("Nie można zamknąć czytnika.", ioexc);
}
}

}
Wniosek
W tym artykule staraliśmy się omówić podstawy błędów i wyjątków oraz obsługi wyjątków w Javie . Mamy nadzieję, że ten przewodnik da ci dobre pojęcie o tej wyjątkowej funkcji oferowanej przez Javę, a teraz będziesz mógł lepiej obsługiwać wyjątki i odzyskiwać je. Wniosek
Java zapewnia sposoby obsługi wyjątków, od specyficznych po ogólne. Wyjątki, których nie można łatwo przewidzieć z góry, nazywane są nieobsługiwanymi wyjątkami. Przechwytywanie wszystkich wyjątków zapewnia zespołowi programistów wgląd w jakość kodu i główne przyczyny błędów, które można szybko naprawić.
Jeśli chcesz dowiedzieć się więcej o Javie, tworzeniu pełnego stosu, zapoznaj się z dyplomem PG upGrad i IIIT-B w zakresie tworzenia oprogramowania z pełnym stosem. Jest starannie wyselekcjonowany dla profesjonalistów i zapewnia wsparcie kariery 360 stopni oraz obejmuje projekty na żywo, nad którymi można pracować. Pod koniec kursu będziesz w stanie projektować i budować aplikacje, takie jak Swiggy, IMDB itp.
Czy to nie brzmi ekscytująco! —