logo

házet a házet v Javě

V Javě je zpracování výjimek jedním z účinných prostředků pro zpracování chyb za běhu, aby bylo možné zachovat pravidelný tok aplikace. Zvládá chyby za běhu, jako je NullPointerException ArrayIndexOutOfBoundsException atd. Pro efektivní zpracování těchto chyb Java poskytuje dvě klíčová slova throw a throws.

Java hod

Klíčové slovo throw v Javě se používá k explicitnímu vyvolání výjimky z metody nebo libovolného bloku kódu. Můžeme vyvolat buď zaškrtnutou nebo nezaškrtnutou výjimku. Klíčové slovo throw se používá hlavně k vyvolání vlastních výjimek. 

Syntax:



hod Instance

Kde instance je objekt typu Throwable (nebo jeho podtřídy, jako je Exception).

Příklad:

throw new ArithmeticException('/ by zero');

Ale tato výjimka, tj. instance, musí být typu Vhazovatelné nebo podtřída Vhazovatelné

Tok provádění programu se zastaví okamžitě po provedení příkazu throw a nejbližším uzavření pokus blok je zkontrolován, zda má a chytit prohlášení, které odpovídá typu výjimky. Pokud zjistí, že shoda je řízena, přenese se do tohoto příkazu, jinak se přiloží k dalšímu pokus blok je zkontrolován a tak dále. Pokud nedojde ke shodě chytit je nalezen, pak výchozí obsluha výjimky program zastaví. 

jejda

Příklad: Tento příklad ukazuje, kde je vyvolána výjimka zachycena a znovu vyvolána uvnitř 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.');  }  } } 

Výstup
Caught inside fun(). Caught in main. 

Vysvětlení: Výše uvedený příklad ukazuje použití klíčového slova throw k explicitnímu vyvolání výjimky NullPointerException. Výjimka je zachycena uvnitř zábava() metoda a znovu vyvolána, kde je pak zachycena v metodě main().

Příklad: Tento příklad ukazuje aritmetickou výjimku.

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

výstup:

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

Vysvětlení: Výše uvedený příklad demonstruje výjimku pomocí throw, kde je aritmetická výjimka explicitně vyvolána kvůli dělení nulou.

Java hází

hází je klíčové slovo v Javě, které se používá v podpisu metody k označení toho, že tato metoda může vyvolat jednu z uvedených typových výjimek. Volající těchto metod musí zpracovat výjimku pomocí bloku try-catch. 

Syntax:

typ název_metody(parametry) vyvolá seznam_výjimek

kde seznam_výjimek je čárkami oddělený seznam všech výjimek, které může metoda vyvolat.

Pokud v programu existuje možnost vyvolání výjimky, pak nás na to kompilátor vždy upozorní a my musíme tuto kontrolovanou výjimku zpracovat. Jinak dostaneme chybu při kompilaci, která říká, že neohlášená výjimka XXX musí být zachycena nebo deklarována jako vyvolaná. Abychom zabránili této chybě při kompilaci, můžeme výjimku zpracovat dvěma způsoby: 

  1. Pomocí try catch
  2. Pomocí hází klíčové slovo

Můžeme použít klíčové slovo throws k delegování odpovědnosti za zpracování výjimek na volajícího (může to být metoda nebo JVM), pak je metoda volajícího zodpovědná za zpracování této výjimky.  

Příklad 1: Neošetřená výjimka

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

výstup:

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

Vysvětlení: Ve výše uvedeném programu dostáváme chybu doby kompilace, protože existuje šance na výjimku, pokud hlavní vlákno přejde do režimu spánku, jiná vlákna dostanou šanci spustit metodu main(), která způsobí InterruptedException. 

Příklad 2: Použití throws zpracovat výjimku

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

výstup:

Hello Geeks

Vysvětlení: Ve výše uvedeném programu pomocí klíčového slova throws jsme zpracovali InterruptedException a dostaneme výstup jako Ahoj Geekové.

Příklad 3: Vyhození výjimky 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.');  }  } } 

Výstup
Inside fun(). Caught in main. 

Vysvětlení: Výše uvedený příklad vyvolání výjimky IllegalAccessException z metody a její zpracování v hlavní metodě pomocí bloku try-catch.

Rozdíl mezi hodem a hodem

Hlavní rozdíly mezi hodem a hodem v Javě jsou následující:

hod

hází

Používá se k explicitnímu vyvolání výjimky.

Používá se k prohlášení, že metoda může vyvolat jednu nebo více výjimek.

urfi javed

Používá se uvnitř metody nebo bloku kódu.

Používá se v podpisu metody.

Může vyvolat zaškrtnuté i nezaškrtnuté výjimky.

Používá se pouze pro zaškrtnuté výjimky. Nekontrolované výjimky nevyžadují hází

Metoda nebo blok vyvolá výjimku.

Volající metodu je zodpovědný za zpracování výjimky.

Okamžitě zastaví aktuální tok provádění.

Přinutí volajícího zpracovat deklarované výjimky.

throw new ArithmeticException('Error');

public void myMethod() vyvolá IOException {}