logo

rzucaj i rzuca w Javie

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.

Java
class 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: 

  1. Używając try catch
  2. 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

Java
class 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 thrown

Wyjaś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

Java
class Geeks {  public static void main(String[] args)  throws InterruptedException  {  Thread.sleep(10000);  System.out.println('Hello Geeks');  } } 

Wyjście:

Hello Geeks

Wyjaś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

Java
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 {}