В урока ще научим за различни подходи за обработка на изключения в Java с помощта на примери.
В последния урок научихме за изключенията на Java. Знаем, че изключенията необичайно прекратяват изпълнението на програма.
Ето защо е важно да се справят с изключенията. Ето списък на различни подходи за обработка на изключения в Java.
- опитайте … блок за хващане
- накрая блокира
- хвърля и хвърля ключова дума
1. Java опит … блок за хващане
Блокът try-catch се използва за обработка на изключения в Java. Ето синтаксиса на try… catch
блок:
try ( // code ) catch(Exception e) ( // code )
Тук сме поставили кода, който може да генерира изключение вътре в try
блока. Всеки try
блок е последван от catch
блок.
Когато възникне изключение, то се улавя от catch
блока. В catch
блока не може да се използва без да е try
блок.
Пример: Обработка на изключения с помощта на try … catch
class Main ( public static void main(String() args) ( try ( // code that generate exception int divideByZero = 5 / 0; System.out.println("Rest of code in try block"); ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) ) )
Изход
ArithmeticException => / по нула
В примера се опитваме да разделим число на 0
. Тук този код генерира изключение.
За да се справим с изключението, сме поставили кода 5 / 0
вътре в try
блока. Сега, когато възникне изключение, останалата част от кода вътре в try
блока се пропуска.
В catch
блока хваща изключение и отчети вътре блок улов се изпълняват.
Ако нито един от изразите в try
блока не генерира изключение, catch
блокът се пропуска.
2. Java най-накрая блокира
В Java finally
блокът винаги се изпълнява, независимо дали има изключение или не.
В finally
блока не е задължително. И за всеки try
блок може да има само един finally
блок.
Основният синтаксис на finally
блока е:
try ( //code ) catch (ExceptionType1 e1) ( // catch block ) finally ( // finally block always executes )
Ако възникне изключение, finally
блокът се изпълнява след try… catch
блока. В противен случай се изпълнява след блока try. За всеки try
блок може да има само един finally
блок.
Пример: Обработка на изключения в Java с помощта на блок block
class Main ( public static void main(String() args) ( try ( // code that generates exception int divideByZero = 5 / 0; ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) finally ( System.out.println("This is the finally block"); ) ) )
Изход
ArithmeticException => / по нула Това е последният блок
В горния пример делим число на 0 вътре в try
блока. Тук този код генерира ArithmeticException
.
Изключението се улавя от catch
блока. И тогава finally
блокът се изпълнява.
Забележка : Добра практика е да използвате finally
блока. Това е така, защото може да включва важни кодове за почистване като,
- код, който може да бъде случайно пропуснат при връщане, продължаване или прекъсване
- затваряне на файл или връзка
3. Ключова дума Java и хвърля
throw
Ключовата дума Java се използва за изрично изхвърляне на едно изключение.
Когато правим throw
изключение, потокът на програмата се премества от try
блока в catch
блока.
Пример: Обработка на изключения с помощта на Java хвърляне
class Main ( public static void divideByZero() ( // throw an exception throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) )
Изход
Изключение в нишка "main" java.lang.ArithmeticException: Опит за разделяне на 0 на Main.divideByZero (Main.java:5) на Main.main (Main.java:9)
В горния пример изрично хвърляме ключовата дума ArithmeticException
using throw
.
По същия начин throws
ключовата дума се използва за деклариране на типа изключения, които могат да възникнат в метода. Използва се в декларацията на метода.
Пример: Java хвърля ключова дума
import java.io.*; class Main ( // declareing the type of exception public static void findFile() throws IOException ( // code that may generate IOException File newFile = new File("test.txt"); FileInputStream stream = new FileInputStream(newFile); ) public static void main(String() args) ( try ( findFile(); ) catch (IOException e) ( System.out.println(e); ) ) )
Изход
java.io.FileNotFoundException: test.txt (Системата не може да намери посочения файл)
Когато стартираме тази програма, ако файлът test.txt не съществува, FileInputStream
изхвърля a, FileNotFoundException
който разширява IOException
класа.
В findFile()
метода се уточнява, че IOException
може да бъде изхвърлен. В main()
метода нарича този метод и дръжки изключение, ако е хвърлен.
Ако методът не се справя с изключенията, видът на изключенията, които могат да възникнат в него, трябва да бъде посочен в throws
клаузата.
За да научите повече, посетете Java хвърляне и хвърляне.