Java Exceptions - Try...Catch


Výjimky Java

Při provádění kódu Java se mohou vyskytnout různé chyby: chyby kódování způsobené programátorem, chyby způsobené nesprávným zadáním nebo jiné nepředvídatelné věci.

Když dojde k chybě, Java se normálně zastaví a vygeneruje chybovou zprávu. Technický termín pro to je: Java vyvolá výjimku (vyhodí chybu).


Java zkuste a chytněte

Příkaz tryvám umožňuje definovat blok kódu, který má být testován na chyby během jeho provádění.

Příkaz catchvám umožňuje definovat blok kódu, který se má provést, pokud v bloku try dojde k chybě.

Klíčová slova trya catchjsou ve dvojicích:

Syntax

try {
  //  Block of code to try
}
catch(Exception e) {
  //  Block of code to handle errors
}

Zvažte následující příklad:

To vygeneruje chybu, protože myNumbers[10] neexistuje.

public class Main {
  public static void main(String[ ] args) {
    int[] myNumbers = {1, 2, 3};
    System.out.println(myNumbers[10]); // error!
  }
}

Výstup bude něco takového:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
        at Main.main(Main.java:4)

Pokud dojde k chybě, můžeme ji try...catchzachytit a spustit nějaký kód, který ji zpracuje:

Příklad

public class Main {
  public static void main(String[ ] args) {
    try {
      int[] myNumbers = {1, 2, 3};
      System.out.println(myNumbers[10]);
    } catch (Exception e) {
      System.out.println("Something went wrong.");
    }
  }
}

Výstupem bude:

Something went wrong.

Konečně

Příkaz finallyvám umožňuje spustit kód po try...catch, bez ohledu na výsledek:

Příklad

public class Main {
  public static void main(String[] args) {
    try {
      int[] myNumbers = {1, 2, 3};
      System.out.println(myNumbers[10]);
    } catch (Exception e) {
      System.out.println("Something went wrong.");
    } finally {
      System.out.println("The 'try catch' is finished.");
    }
  }
}

Výstupem bude:

Something went wrong.
The 'try catch' is finished.


Klíčové slovo hod

Příkaz throwumožňuje vytvořit vlastní chybu.

Příkaz throwse používá společně s typem výjimky . V Javě je k dispozici mnoho typů výjimek: ArithmeticException, FileNotFoundException, ArrayIndexOutOfBoundsException, SecurityExceptionatd.:

Příklad

Vyhoďte výjimku, pokud je věk nižší než 18 (vytiskněte "Přístup odepřen"). Pokud je vám 18 nebo více let, vytiskněte „Přístup udělen“:

public class Main {
  static void checkAge(int age) {
    if (age < 18) {
      throw new ArithmeticException("Access denied - You must be at least 18 years old.");
    }
    else {
      System.out.println("Access granted - You are old enough!");
    }
  }

  public static void main(String[] args) {
    checkAge(15); // Set age to 15 (which is below 18...)
  }
}

Výstupem bude:

Exception in thread "main" java.lang.ArithmeticException: Access denied - You must be at least 18 years old.
        at Main.checkAge(Main.java:4)
        at Main.main(Main.java:12)

Pokud by vám bylo 20 let , nedostali byste výjimku:

Příklad

checkAge(20);

Výstupem bude:

Access granted - You are old enough!

Otestujte se pomocí cvičení

Cvičení:

Vložte chybějící části, abyste zvládli chybu v níže uvedeném kódu.

 {
  int[] myNumbers = {1, 2, 3};
  System.out.println(myNumbers[10]);
}  (Exception e) {
  System.out.println("Something went wrong.");
}