"Throwable" to klasa nadrzędna klas Error and Exception. Klasa "RuntimeException" i jej podklasy, klasa "Error" i jej klasy potomne to "Niezaznaczone wyjątki", podczas gdy pozostałe podklasy klasy "Exception" z wyjątkiem "RuntimeException" są sprawdzanymi wyjątkami. Podstawowa różnica między sprawdzonym i niezaznaczonym wyjątkiem polega na sprawdzaniu sprawdzanych wyjątków przez kompilator, podczas gdy kompilator nie sprawdza niesprawdzonych wyjątków .
Omówmy inne różnice między sprawdzonymi i niezaznaczonymi wyjątkami za pomocą tabeli porównawczej.
Wykres porównania
Podstawa do porównania | Sprawdzony wyjątek | Niezaznaczony wyjątek |
---|---|---|
Podstawowy | Kompilator sprawdza zaznaczony wyjątek. | Kompilator nie sprawdza wyjątku Niezaznaczone. |
Klasa wyjątków | Z wyjątkiem klasy "RuntimeException" wszystkie klasy potomne klasy "Exception" oraz klasa "Error" i jej klasy potomne to Checked Exception. | Klasa "RuntimeException" i jej klasy podrzędne to "Niezaznaczone wyjątki". |
Obsługa | Jeśli nie obsłużymy sprawdzonego wyjątku, obiekty kompilatora. | Nawet jeśli nie obsłużymy niesprawdzonego wyjątku, kompilator nie sprzeciwia się. |
Kompilacja | Program nie kompiluje się, jeśli w kodzie programu znajduje się nieobsługiwany sprawdzony wyjątek. | Program kompiluje się pomyślnie, nawet jeśli w kodzie programu występuje nieobsługiwany wyjątek odznaczony. |
Definicja sprawdzonego wyjątku
Sprawdzane wyjątki są wyjątkami sprawdzanymi przez kompilator pod kątem sprawnego wykonywania programu. Kompilator sprawdza, czy program może obsłużyć sprawdzony wyjątek, czy nie. Jeśli kod nie może obsłużyć wyjątku, pojawia się błąd kompilacji. Wszystkie podklasy klasy "Wyjątek" z wyjątkiem klasy RuntimeException są sprawdzanymi wyjątkami.
Przeanalizujmy sprawdzony wyjątek na przykładzie.
import java.io. *; class Przykład {public static void main (String args []) {FileInputStream fis = null; fis = new FileInputStream ("B: /myfile.txt"); // Ten konstruktor FileInputStream (nazwa pliku) zgłasza wyjątek FileNotFoundException, który jest zaznaczony. int k; while ((k = fis.read ())! = -1) {// Metoda read () klasy FileInputStream również zgłasza sprawdzony wyjątek: IOException. System.out.print ((char) k); } fis.close (); // Metoda close () zamyka strumień wejściowy pliku, który wywołuje wyjątek IOException. }}
W powyższym kodzie staramy się otwierać, czytać i wyświetlać zawartość plików. Może się zdarzyć, że plik nie będzie obecny, wystąpi wyjątek FileNotFoundException, który jest sprawdzanym wyjątkiem. Jeśli sprawdzony wyjątek nie jest obsługiwany, kompilator nie pozwoli na płynne kompilowanie programu. Pokaże błąd podczas kompilacji. Tak więc, aby kompilacja była płynna, sprawdzany wyjątek musi zostać przechwycony lub zgłoszony jako zgłoszony.
Definicja niezaznaczonego wyjątku
Niezaznaczone wyjątki są wyjątkami, które nie są sprawdzane przez kompilator. Kompilator pomyślnie kompiluje program, nawet jeśli wyjątki nie są obsługiwane przez kod. Klasa "Błąd" i jej klasy potomne, klasa "Środowisko wykonawcze" i jej podklasy są niezaznaczonymi wyjątkami.
Zobaczmy przykład niesprawdzonego wyjątku.
class Przykład {public static void main (String args []) {int arr [] = {1, 2, 3, 4, 5}; System.out.println (arr [7]); // ArrayIndexOutOfBoundsException. }}
W powyższym kodzie widać, że istnieje wyjątek ArrayIndexOutOfBoundsException, ponieważ próbuję uzyskać dostęp do elementu, który nie istnieje. Ponieważ jest to niesprawdzony wyjątek, błąd kompilacji nie wystąpi, a plik zostanie skompilowany bez żadnego błędu. Ale program nie zostanie wykonany, dopóki wyjątek nie zostanie obsłużony. Tak więc, dla sprawnego wykonania, wyjątki muszą zostać przechwycone lub zadeklarowane jako rzucone
Kluczowe różnice między sprawdzonym i niezaznaczonym wyjątkiem
- Sprawdzane wyjątki znają kompilator, natomiast wyjątki odznaczone nie są znane kompilatorowi.
- Oprócz klasy RuntimeException i Error wszystkie klasy są zaznaczone wyjątek. Z drugiej strony klasy RuntimeException i Error są niezaznaczonymi wyjątkami.
- Jeśli sprawdzane wyjątki nie są obsługiwane przez kod, obiekt kompiluje. Z drugiej strony, jeśli nie obsłużymy niezerowych wyjątków w kodzie, kompilator nie sprzeciwia się.
- Jeśli w kodzie pojawią się zaznaczone wyjątki, kod się nie skompiluje, podczas gdy nawet jeśli niezaznaczone wyjątki nie będą obsługiwane przez kod, kompilator nadal będzie kompilował kod.
Uwaga :
Oba sprawdzane lub niezaznaczone wyjątki obowiązkowo występują podczas działania. Są one zaznaczane lub wyłączane przez kompilator podczas kompilacji.
Wniosek:
Zarówno sprawdzane, jak i niezaznaczone wyjątki muszą być obsługiwane w celu płynnego wykonywania programu.