English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Exception (исключение) - это проблема, которая возникает в процессе выполнения программы (время выполнения ошибки). Вот несколько примеров планов-
Если размер вашего массива составляет 10, если строка кода пытается получить доступ к 11-му элементу массива.
Если вы пытаетесь разделить на ноль цифру (результат бесконечен, а JVM не знает, как вычислить его значение).
Когда возникает исключение, программа внезапно останавливается на строке, которая вызвала исключение, что делает невозможным выполнение оставшейся части программы. Чтобы предотвратить это, вам нужно обработать исключения.
В Java есть два типа исключений.
Непроверенные исключения - Непроверенные исключения возникают в время выполнения и также называются исключениями времени выполнения. Это также включают в себя ошибки программирования, такие как логические ошибки или неправильное использование API. Компиляция пропускает исключения времени выполнения.
Проверяемые исключения - Проверяемые исключения возникают в компиляции времени и также называются компиляционными исключениями. Эти исключения нельзя просто пропустить в компиляции. Программист должен учитывать (обрабатывать) эти исключения.
Для обработки исключений Java предоставляет механизм блока try-catch.
Чтобы обработать исключение, в код, который может вызывать исключение, помещается блок try / catch. Код в блоке try / catch называется защищенным кодом.
try { // Защищенный код } // Блок catch {}
Когда исключение возникает в блоке try, JVM хранит详细信息 об исключении в стеке исключений и продолжает обработку блока catch, а не завершает программу.
Предложение catch включает声明 типа исключения, которое вы хотите перехватить. Если в блоке try возникает исключение, проверяется блок catch после try.
Если в блоке catch указан тип возникшего исключения, то исключение передается в блок catch так же, как параметр передается в метод.
import java.io.File; import java.io.FileInputStream; public class Test { public static void main(String args[]){ System.out.println("Hello"); try{ File file = new File("my_file"); FileInputStream fis = new FileInputStream(file); } System.out.println("Не удалось найти путь к указанному файлу"); {} {} {}
Результат вывода
Не удалось найти путь к указанному файлу
Когда вы сохраняете исключение в блоке catch, вы можете выбросить его заново с помощью ключевого слова throw (для выбрасывания объекта исключения).
При выбрасывании исключения вы можете выбросить его в том же виде, не нужно его изменять.
try { int result = (arr[a]) / (arr[b]); System.out.println("Результат " + arr[a] + "/" + arr[b] + ": " + result); } throw e; {}
Или упаковать его в новое исключение и выбросить. Когда вы упаковываете сохраненное исключение в другое исключение и выбрасываете его, это называется цепочкой исключений или упаковкой исключений, и таким образом вы можете изменить свои исключения, выбрасывая более высокий уровень исключения.
try { int result = (arr[a]) / (arr[b]); System.out.println("Результат " + arr[a] + "/" + arr[b] + ": " + result); throw new IndexOutOfBoundsException(); catch(ArithmeticException e) { {}
В следующем примере Java код в demoMethod() может выбрасывать исключения ArrayIndexOutOfBoundsException и ArithmeticException. Мы ловим эти исключения в двух различных блоках catch.
В блоке catch мы выбрасываем две исключения, одно из которых упаковано в более высокий уровень исключения, а другое выбрасывается напрямую.
import java.util.Arrays; import java.util.Scanner; public class RethrowExample { public void demoMethod() { Scanner sc = new Scanner(System.in); int[] arr = {10, 20, 30, 2, 0, 8}; System.out.println("Массив: " + Arrays.toString(arr)); System.out.println("Выберите числитель и знаменатель (не 0) из этого массива (введите позиции от 0 до 5)"); int a = sc.nextInt(); int b = sc.nextInt(); try { int result = (arr[a]) / (arr[b]); System.out.println("Результат " + arr[a] + "/" + arr[b] + ": " + result); throw new IndexOutOfBoundsException(); catch(ArithmeticException e) { } throw e; {} {} public static void main(String [] args) { new RethrowExample().demoMethod(); {} {}
Результат вывода
Массив: [10, 20, 30, 2, 0, 8] Выберите числитель и знаменатель (не 0) из этого массива (введите позиции 0 до 5) 0 4 Exception in thread "main" java.lang.ArithmeticException: / by zero at myPackage.RethrowExample.demoMethod(RethrowExample.java:16) at myPackage.RethrowExample.main(RethrowExample.java:25)
Результат вывода
Массив: [10, 20, 30, 2, 0, 8] Выберите числитель и знаменатель (не 0) из этого массива (введите позиции 0 до 5) 124 5 Exception in thread "main" java.lang.IndexOutOfBoundsException at myPackage.RethrowExample.demoMethod(RethrowExample.java:17) at myPackage.RethrowExample.main(RethrowExample.java:23)