logo

bacati i bacati u Javu

U Javi rukovanje iznimkama jedno je od učinkovitih sredstava za rješavanje pogrešaka u vremenu izvođenja tako da se može očuvati redoviti tok aplikacije. Obrađuje pogreške tijekom izvođenja kao što je NullPointerException ArrayIndexOutOfBoundsException itd. Za učinkovito rješavanje ovih pogrešaka Java nudi dvije ključne riječi throw i throws.

Java bacanje

Ključna riječ throw u Javi se koristi za eksplicitno bacanje iznimke iz metode ili bilo kojeg bloka koda. Možemo izbaciti označenu ili neprovjerenu iznimku. Ključna riječ throw se uglavnom koristi za bacanje prilagođenih iznimaka. 

Sintaksa:



baciti Primjer

Gdje je instanca objekt tipa Throwable (ili njegove podklase kao što je Exception).

Primjer:

izbaci novu ArithmeticException('/ by zero');

Ali ova iznimka, tj. instanca mora biti tipa Za bacanje ili podklasu od Za bacanje

Tijek izvođenja programa se zaustavlja odmah nakon što se izvede naredba throw i najbliži priključujući probati blok se provjerava ima li a ulov izjava koja odgovara tipu iznimke. Ako pronađe kontrolirano podudaranje, prenosi se u tu izjavu koja se u suprotnom prilaže probati blok je provjeren i tako dalje. Ako nema podudaranja ulov pronađen tada će zadani rukovatelj iznimkama zaustaviti program. 

Madhuri je rekla

Primjer: Ovaj primjer pokazuje gdje je iznimka izbačena uhvaćena i ponovno izbačena unutar metode.

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.');  }  } } 

Izlaz
Caught inside fun(). Caught in main. 

Obrazloženje: Gornji primjer pokazuje upotrebu ključne riječi throw za eksplicitno izbacivanje NullPointerException. Iznimka je uhvaćena unutar zabava() metodu i ponovno baca gdje je zatim uhvaćen u metodi main().

Primjer: Ovaj primjer pokazuje aritmetičku iznimku.

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);  }  } } 

Izlaz:

Hangup (SIGHUP)  
Exception in thread 'main' java.lang.ArithmeticException: Cannot divide by zero
at Geeks.main(Geeks.java:9)

Obrazloženje: Gornji primjer pokazuje iznimku koja koristi throw gdje je ArithmeticException eksplicitno izbačena zbog dijeljenja s nulom.

Java baca

bacanja je ključna riječ u Javi koja se koristi u potpisu metode za označavanje da ova metoda može izbaciti jednu od navedenih iznimki tipa. Pozivatelj ovih metoda mora obraditi iznimku pomoću bloka try-catch. 

Sintaksa:

tip method_name(parametri) izbacuje iznimku_list

gdje je popis izuzetaka popis svih izuzetaka koje bi metoda mogla izbaciti odvojena zarezom.

U programu, ako postoji mogućnost podizanja iznimke, tada nas kompilator uvijek upozorava na to i moramo obraditi tu provjerenu iznimku. U suprotnom ćemo dobiti pogrešku vremena kompajliranja koja kaže da se neprijavljena iznimka XXX mora uhvatiti ili proglasiti bačenom. Kako bismo spriječili ovu pogrešku vremena kompajliranja, možemo riješiti iznimku na dva načina: 

  1. Korištenjem try catch
  2. Korištenjem bacanja ključna riječ

Možemo upotrijebiti ključnu riječ throws da delegiramo odgovornost rukovanja iznimkama pozivatelju (to može biti metoda ili JVM) tada je metoda pozivatelja odgovorna za obradu te iznimke.  

Primjer 1: Neobrađena iznimka

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

Izlaz:

error: unreported exception InterruptedException; must be caught or declared to be thrown

Obrazloženje: U gornjem programu dobivamo pogrešku vremena kompajliranja jer postoji mogućnost iznimke ako glavna nit ide u stanje mirovanja, druge niti imaju priliku izvršiti metodu main() koja će uzrokovati InterruptedException. 

Primjer 2: Korištenje throws rukovati iznimkom

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

Izlaz:

Hello Geeks

Obrazloženje: U gornjem programu pomoću ključne riječi throws obradili smo InterruptedException i dobit ćemo izlaz kao Pozdrav štreberima.

Primjer 3: Izbacivanje iznimke sthrows

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.');  }  } } 

Izlaz
Inside fun(). Caught in main. 

Obrazloženje: Gornji primjer baca IllegalAccessException iz metode i rukuje njime u glavnoj metodi pomoću bloka try-catch.

Razlika između bacanja i bacanja

Glavne razlike između throw i throws u Javi su sljedeće:

baciti

bacanja

Koristi se za eksplicitno bacanje iznimke.

Koristi se za deklaraciju da bi metoda mogla izbaciti jednu ili više iznimki.

to je

Koristi se unutar metode ili bloka koda.

Koristi se u potpisu metode.

Može bacati i provjerene i neprovjerene iznimke.

Koristi se samo za provjerene iznimke. Neprovjerene iznimke ne zahtijevaju bacanja

Metoda ili blok izbacuje iznimku.

Pozivatelj metode odgovoran je za rukovanje iznimkom.

Odmah zaustavlja trenutni tijek izvršenja.

Prisiljava pozivatelja da obrađuje deklarirane iznimke.

izbaci novu ArithmeticException('Greška');

public void myMethod() izbacuje IOException {}