Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Обработка исключений в Java: try, catch, finally, throw и throws

Мастерство обработки исключений в Java

Это руководство проводит вас через механизмы обработки исключений Java — try-catch, finally, throw и throws — с понятными примерами и лучшими практиками.

В предыдущем уроке мы представили исключения Java и почему они прерывают поток программы. Грамотная обработка этих исключений необходима для надежного, поддерживаемого кода.

Ниже основные стратегии управления исключениями в Java:


1. Использование блока try…catch

Конструкция try…catch — краеугольный камень модели обработки ошибок Java. Поместите любой код, который может выбросить исключение, внутри блока try, и перехватывайте конкретные исключения после.

try { // код, который может выбросить } catch(Exception e) { // обработка исключения }

Клауза catch обязательна при появлении блока try; она перехватывает исключение и позволяет вам ответить соответствующим образом.

Пример: Обработка ArithmeticException

class Main { public static void main(String[] args) { try { int divideByZero = 5 / 0; System.out.println("Rest of code in try block"); } catch (ArithmeticException e) { System.out.println("ArithmeticException => " + e.getMessage()); } } }

Вывод:

ArithmeticException => / by zero

В этом фрагменте деление на ноль вызывает ArithmeticException. Исключение перехватывается, выполняется блок catch, и любой код после исключения внутри try пропускается.

Если блок try завершается без выбрасывания, блок catch просто обходится.


2. Использование блока finally

Блок finally всегда выполняется, независимо от того, было ли выброшено исключение. Это идеальное место для задач очистки — закрытия файлов, освобождения ресурсов или логирования.

Только один блок finally может сопровождать данный оператор try.

try { // код } catch (ExceptionType1 e1) { // обработка } finally { // всегда выполняется }

Пример: finally после исключения

class Main { public static void main(String[] args) { try { int divideByZero = 5 / 0; } catch (ArithmeticException e) { System.out.println("ArithmeticException => " + e.getMessage()); } finally { System.out.println("This is the finally block"); } } }

Вывод:

ArithmeticException => / by zero This is the finally block

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

Лучшая практика: Используйте finally для любого кода, который должен выполняться независимо от успеха или неудачи, например, закрытия потоков или сброса общего состояния.


3. Явное выбрасывание исключений и объявление throws

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

Пример: Использование throw

class Main { public static void divideByZero() { throw new ArithmeticException("Trying to divide by 0"); } public static void main(String[] args) { divideByZero(); } }

Вывод:

Exception in thread "main" java.lang.ArithmeticException: Trying to divide by 0 at Main.divideByZero(Main.java:5) at Main.main(Main.java:9)

Клауза throws, с другой стороны, объявляет, что метод может распространять определенные checked-исключения. Она сигнализирует вызывающим, что они должны обработать или дальше распространить исключение.

Пример: Использование throws с файловым вводом-выводом

import java.io.*; class Main { // Объявить, что этот метод может выбросить IOException public static void findFile() throws 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 (The system cannot find the file specified)

Если файл не существует, FileInputStream выбрасывает FileNotFoundException, который является подклассом IOException. Поскольку findFile() объявляет throws IOException, метод main должен обработать его.

Когда метод не перехватывает исключение внутренне, вы должны объявить его с throws, чтобы информировать вызывающих о потенциальном сбое.

Для глубокого понимания изучите документацию Java по throw и throws.

java

  1. Освоение операторов Java: типы, синтаксис и практические примеры
  2. Комментарии в Java: типы, использование и лучшие практики
  3. Освоение улучшенного цикла for в Java: синтаксис, примеры и лучшие практики
  4. Освоение строк в Java: создание, методы и лучшие практики
  5. Интерфейсы в Java: концепции, реализация и лучшие практики
  6. Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
  7. Обработка исключений в Java: try-catch-finally и try-with-resources
  8. Try-with-resources в Java: автоматическое управление ресурсами
  9. Аннотации в Java: типы, размещение и практические примеры
  10. Assertions в Java: практическое руководство по обнаружению багов и обеспечению надежности кода