W Javie obsługa wyjątków jest jednym ze skutecznych sposobów obsługi błędów czasu wykonywania, pozwalającym zachować regularny przepływ aplikacji. Obsługuje błędy czasu wykonania, takie jak NullPointerException ArrayIndexOutOfBoundsException itp. Aby skutecznie obsługiwać te błędy, Java udostępnia dwa słowa kluczowe „throw” i „rzuca”.
Rzut Java
Słowo kluczowe rzut w Javie służy do jawnego zgłaszania wyjątku od metody lub dowolnego bloku kodu. Możemy zgłosić zaznaczony lub niesprawdzony wyjątek. Słowo kluczowe Throw służy głównie do zgłaszania niestandardowych wyjątków.
Składnia:
rzucić Przykład
Gdzie instancja jest obiektem typu Throwable (lub jego podklasami, takimi jak wyjątek).
Przykład:
rzuć nowy wyjątek ArithmeticException('/ przez zero');
Ale ten wyjątek, tj. Instancja, musi być typu Możliwość rzucania lub podklasa Możliwość rzucania .
Wykonywanie programu zatrzymuje się natychmiast po wykonaniu instrukcji rzutu i najbliższym zamknięciu próbować blok jest sprawdzany, czy ma złapać instrukcja pasująca do typu wyjątku. Jeśli stwierdzi, że dopasowanie jest kontrolowane, jest przenoszone do tej instrukcji, w innym przypadku w następnym załączeniu próbować blok jest sprawdzany i tak dalej. Jeśli nie ma dopasowania złapać zostanie znaleziony, wówczas domyślna procedura obsługi wyjątków zatrzyma program.
znaczniki HTML
Przykład: Ten przykład pokazuje, gdzie wyjątek został przechwycony i ponownie zgłoszony wewnątrz metody.
Javaclass Geeks { static void fun() { try { throw new NullPointerException('demo'); } catch (NullPointerException e) { System.out.println('Caught inside fun().'); throw e; // rethrowing the exception } } public static void main(String args[]) { try { fun(); } catch (NullPointerException e) { System.out.println('Caught in main.'); } } }
Wyjście
Caught inside fun(). Caught in main.
Wyjaśnienie: Powyższy przykład ilustruje użycie słowa kluczowego rzut w celu jawnego zgłoszenia wyjątku NullPointerException. Wyjątek jest złapany wewnątrz zabawa() i ponownie wygenerowany, gdzie następnie zostanie przechwycony przez metodę main().
Przykład: Ten przykład ilustruje wyjątek arytmetyczny.
Java// Throwing an arithmetic exception class Geeks { public static void main(String[] args){ int numerator = 1; int denominator = 0; if (denominator == 0) { // Manually throw an ArithmeticException throw new ArithmeticException('Cannot divide by zero'); } else { System.out.println(numerator / denominator); } } }
Wyjście:
Hangup (SIGHUP)
Exception in thread 'main' java.lang.ArithmeticException: Cannot divide by zero
at Geeks.main(Geeks.java:9)
Wyjaśnienie: Powyższy przykład ilustruje wyjątek przy użyciu rzutu, w którym jawnie zgłaszany jest wyjątek ArithmeticException z powodu dzielenia przez zero.
Rzuca Java
rzuca to słowo kluczowe w języku Java używane w podpisie metody w celu wskazania, że metoda ta może zgłosić jeden z wyjątków typów wymienionych na liście. Osoba wywołująca te metody musi obsłużyć wyjątek za pomocą bloku try-catch.
Składnia:
typ nazwa_metody (parametry) zgłasza listę wyjątków
gdzie lista_wyjątków jest rozdzieloną przecinkami listą wszystkich wyjątków, które może zgłosić metoda.
W programie, jeśli istnieje szansa na zgłoszenie wyjątku, kompilator zawsze nas o tym ostrzega i musimy obsłużyć sprawdzony wyjątek. W przeciwnym razie pojawi się błąd kompilacji informujący, że niezgłoszony wyjątek XXX musi zostać przechwycony lub zadeklarowany jako zgłoszony. Aby zapobiec temu błędowi czasu kompilacji, możemy obsłużyć wyjątek na dwa sposoby:
- Używając try catch
- Korzystając z rzuca słowo kluczowe
Możemy użyć słowa kluczowego rzuca, aby delegować odpowiedzialność za obsługę wyjątków na osobę wywołującą (może to być metoda lub maszyna JVM), a następnie metoda wywołująca jest odpowiedzialna za obsługę tego wyjątku.
Przykład 1: Nieobsługiwany wyjątek
Javaclass Geeks { public static void main(String[] args) { Thread.sleep(10000); System.out.println('Hello Geeks'); } }
Wyjście:
error: unreported exception InterruptedException; must be caught or declared to be thrownWyjaśnienie: W powyższym programie pojawia się błąd czasu kompilacji, ponieważ istnieje ryzyko wyjątku, jeśli główny wątek przejdzie w stan uśpienia, inne wątki dostaną szansę na wykonanie metody main(), co spowoduje wyjątek InterruptedException.
Przykład 2: Używanie throws do obsługi wyjątku
class Geeks { public static void main(String[] args) throws InterruptedException { Thread.sleep(10000); System.out.println('Hello Geeks'); } }
Wyjście:
Hello GeeksWyjaśnienie: W powyższym programie za pomocą słowa kluczowego rzuty obsłużyliśmy funkcję Przerwany wyjątek i otrzymamy wynik jako Witam Geeków.
c programowanie przykładowych programów
Przykład 3: Zgłaszanie wyjątku za pomocąthrows
class Geeks { static void fun() throws IllegalAccessException { System.out.println('Inside fun(). '); throw new IllegalAccessException('demo'); } public static void main(String args[]) { try { fun(); } catch (IllegalAccessException e) { System.out.println('Caught in main.'); } } }
Wyjście
Inside fun(). Caught in main.
Wyjaśnienie: Powyższy przykład zgłasza wyjątek IllegalAccessException z metody i obsługuje go w metodzie głównej za pomocą bloku try-catch.
Różnica między rzutem a rzutem
Główne różnice między rzutami i rzutami w Javie są następujące:
węzeł listy w Javie
rzucić | rzuca |
|---|---|
Służy do jawnego zgłaszania wyjątku. | Służy do deklarowania, że metoda może zgłosić jeden lub więcej wyjątków. |
Jest używany wewnątrz metody lub bloku kodu. | Jest używany w sygnaturze metody. |
Może zgłaszać zarówno zaznaczone, jak i niesprawdzone wyjątki. | Jest używany tylko w przypadku sprawdzonych wyjątków. Niesprawdzone wyjątki nie wymagają rzuca |
Metoda lub blok zgłasza wyjątek. | Osoba wywołująca metodę jest odpowiedzialna za obsługę wyjątku. |
Natychmiast zatrzymuje bieżący przepływ wykonania. | Zmusza osobę wywołującą do obsługi zadeklarowanych wyjątków. |
rzuć nowy wyjątek ArithmeticException('Błąd'); | public void myMethod() zgłasza wyjątek IOException {} |