English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Блоки try, catch, finally в Java

Исключения - это проблемы, возникающие в процессе выполнения программы (ошибки времени выполнения). Давайте рассмотрим это с другой стороны для понимания.

Обычно, при компиляции программы, если при компиляции не создается файл .class, то это файл является исполняемым файлом Java, и каждый раз, когда вы выполняете этот файл .class, он должен успешно запускаться, чтобы выполнить каждую строку без проблем. Но в некоторых специальных случаях JVM сталкивается с некоторыми неопределенными ситуациями во время выполнения программы, они не знают, что делать.

Вот несколько примерных решений-

  • Если размер вашего массива составляет 10, то в строке кода пытается получить доступ к 11-му элементу массива.

  • Если вы пытаетесь разделить число на ноль (результат бесконечен, и JVM не может понять, как его оценить).

Обычно, когда возникает исключение, программа внезапно останавливается на строке, которая вызвала исключение, что делает невозможным выполнение оставшейся части программы. Чтобы предотвратить это, вам нужно обработать исключение.

Блоки try, catch, finally

Чтобы обработать исключения, Java предоставляет механизм блоков try-catch.

Вокруг кода, который может вызывать исключения, помещается блок try / catch. Код в блоке try / catch называется защищенным кодом.

Синтаксис

try {
   // Защищенный код
} catch (ExceptionName e1) {
   // Блок catch
}

Когда в блоке try вызывается исключение, JVM завершает детальную информацию об исключении, а не завершает программу, сохраняет детальную информацию об исключении в стек исключений и переходит в блок catch.

catch-запрос涉及到声明 того типа исключения, которое вы хотите перехватить. Если в блоке try возникает исключение, то оно передается в следующий блок catch.

Если в блоке 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("Указанный путь к файлу не найден");
      }
   }
}

Результат вывода

Указанный путь к файлу не найден

Блок finally расположен после блока try или catch. Вне зависимости от того, произошло ли исключение, всегда выполняется блок кода finally.

Пример

public class ExcepTest {
   public static void main(String args[]) {
      int a[] = new int[2];
      try {
         System.out.println("Доступ к элементу три: " + a[3]);
      } catch (ArrayIndexOutOfBoundsException e) {
         System.out.println("Исключение: " + e);
      }finally {
         a[0] = 6;
         System.out.println("Значение первого элемента: " + a[0]);
         System.out.println("Выполнение выражения finally");
      }
   }
}

Результат вывода

Исключение: java.lang.ArrayIndexOutOfBoundsException: 3
Значение первого элемента: 6
Выполнение выражения finally
Давайте посмотрим, что вам понравится