logo

vrže in vrže v Javo

V Javi je obravnavanje izjem eno od učinkovitih sredstev za obravnavanje napak med izvajanjem, tako da se lahko ohrani redni tok aplikacije. Obravnava napake med izvajanjem, kot je NullPointerException ArrayIndexOutOfBoundsException itd. Za učinkovito obravnavo teh napak Java nudi dve ključni besedi throw in throws.

Java met

Ključna beseda throw v Javi se uporablja za eksplicitno vračanje izjeme iz metode ali katerega koli bloka kode. Vržemo lahko označeno ali nepreverjeno izjemo. Ključna beseda throw se večinoma uporablja za vračanje izjem po meri. 

Sintaksa:



metati Primerek

Kjer je primerek objekt tipa Throwable (ali njegovih podrazredov, kot je Exception).

primer:

vrzi novo ArithmeticException('/ z ničlo');

Toda ta izjema, tj. primerek, mora biti tipa Za metanje ali podrazred Za metanje

Tok izvajanja programa se ustavi takoj po izvedbi stavka vrženja in najbližjega obkrožanja poskusi blok se preveri, ali ima a ulov izjava, ki ustreza vrsti izjeme. Če najde nadzorovano ujemanje, se prenese v to izjavo, ki je sicer naslednja poskusi blok je preverjen in tako naprej. Če ni ujemanja ulov je najden, bo privzeti obravnavalec izjem zaustavil program. 

bash if stanje

primer: Ta primer prikazuje, kje je vržena izjema, ujeta in ponovno vržena znotraj 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.');  }  } } 

Izhod
Caught inside fun(). Caught in main. 

Pojasnilo: Zgornji primer prikazuje uporabo ključne besede throw za izrecno vrženje NullPointerException. Izjema je ujeta znotraj zabava() metodo in ponovno vrže, kjer se nato ujame v metodo main().

primer: Ta primer prikazuje aritmetično izjemo.

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

Izhod:

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

Pojasnilo: Zgornji primer prikazuje izjemo z uporabo throw, kjer je ArithmeticException izrecno vržena zaradi deljenja z ničlo.

Java meče

vrže je ključna beseda v Javi, ki se uporablja v podpisu metode za označevanje, da bi ta metoda lahko vrgla eno od navedenih izjem vrste. Klicatelj teh metod mora obravnavati izjemo z blokom try-catch. 

Sintaksa:

tip ime_metode(parametri) vrže seznam_izjem

kjer je seznam_izjem z vejicami ločen seznam vseh izjem, ki jih lahko vrže metoda.

tabela ascii java

Če v programu obstaja možnost sprožitve izjeme, nas prevajalnik vedno opozori na to in obravnavati moramo to preverjeno izjemo. V nasprotnem primeru bomo prejeli napako v času prevajanja, ki pravi, da je treba neprijavljeno izjemo XXX ujeti ali razglasiti za vrženo. Da preprečimo to napako v času prevajanja, lahko izjemo obravnavamo na dva načina: 

  1. Z uporabo poskusi ujeti
  2. Z uporabo vrže ključna beseda

Ključno besedo throws lahko uporabimo za prenos odgovornosti za obravnavo izjeme na klicatelja (lahko je to metoda ali JVM), nato pa je za obravnavo te izjeme odgovorna metoda klicatelja.  

Primer 1: Neobravnavana izjema

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

Izhod:

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

Pojasnilo: V zgornjem programu dobimo napako časa prevajanja, ker obstaja možnost izjeme, če glavna nit spi, druge niti dobijo možnost, da izvedejo metodo main(), ki bo povzročila InterruptedException. 

Primer 2: Uporaba throws za obravnavo izjeme

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

Izhod:

Hello Geeks

Pojasnilo: V zgornjem programu smo z uporabo ključne besede throws obravnavali InterruptedException in dobili bomo izhod kot Pozdravljeni Geeki.

Primer 3: Izvajanje izjeme zthrows

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

Izhod
Inside fun(). Caught in main. 

Pojasnilo: Zgornji primer vrže izjemo IllegalAccessException iz metode in jo obravnava v glavni metodi z uporabo bloka try-catch.

Razlika med metom in meti

Glavne razlike med throw in throws v Javi so naslednje:

metati

vrže

Uporablja se za izrecno pošiljanje izjeme.

Uporablja se za razglasitev, da lahko metoda vrže eno ali več izjem.

Uporablja se znotraj metode ali bloka kode.

Uporablja se v podpisu metode.

Vrže lahko preverjene in nepreverjene izjeme.

Uporablja se samo za preverjene izjeme. Nepreverjene izjeme ne zahtevajo vrže

Metoda ali blok sproži izjemo.

Klicatelj metode je odgovoren za obravnavanje izjeme.

Takoj ustavi trenutni tok izvajanja.

Klicatelja prisili, da obravnava deklarirane izjeme.

es5 proti es6

vrzi novo ArithmeticException('Napaka');

public void myMethod() vrže IOException {}