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. 

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.

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:

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