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

Мульти-исключения в Java: перехват нескольких исключений в одном catch блоке

Мастерство мульти-исключений в Java

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

До Java 7 разработчикам приходилось писать отдельные блоки catch для каждого типа исключения, даже когда логика обработки была идентичной.

Рассмотрим следующий сценарий.

Пример 1: Отдельные catch блоки

class Main { public static void main(String[] args) { try { int[] array = new int[10]; array[10] = 30 / 0; } catch (ArithmeticException e) { System.out.println(e.getMessage()); } catch (ArrayIndexOutOfBoundsException e) { System.out.println(e.getMessage()); } } } 

Вывод:

/ by zero

В этом примере могут возникнуть две различные проблемы:

Оба блока catch выполняют одно и то же действие, приводя к дублированию кода.


Перехват нескольких исключений в одном блоке

Начиная с Java SE 7, вы можете объединить несколько типов исключений в один блок catch с помощью разделителя pipe (|).

Синтаксис:

try { // код } catch (ExceptionType1 | ExceptionType2 ex) { // обработчик } 

Пример 2: Multi-catch блок

class Main { public static void main(String[] args) { try { int[] array = new int[10]; array[10] = 30 / 0; } catch (ArithmeticException | ArrayIndexOutOfBoundsException e) { System.out.println(e.getMessage()); } } } 

Вывод:

/ by zero

Объединяя обработчики, код становится чище, байт-код меньше, а поддержка проще.

Примечание: В multi-catch параметр неявно final, поэтому вы не можете переназначить его.


Использование базового класса исключения

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

Пример 3: Перехват базового класса Exception

class Main { public static void main(String[] args) { try { int[] array = new int[10]; array[10] = 30 / 0; } catch (Exception e) { System.out.println(e.getMessage()); } } } 

Вывод:

/ by zero

Поскольку каждое конкретное исключение в Java расширяет Exception, этот единственный catch блок обрабатывает все вышеуказанные сценарии.


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

Пример 4: Недопустимое сочетание базового и дочерних исключений

class Main { public static void main(String[] args) { try { int[] array = new int[10]; array[10] = 30 / 0; } catch (Exception | ArithmeticException | ArrayIndexOutOfBoundsException e) { System.out.println(e.getMessage()); } } } 

Вывод:

Main.java:6: error: Alternatives in a multi-catch statement cannot be related by subclassing

Эта ошибка возникает, потому что ArithmeticException и ArrayIndexOutOfBoundsException являются подклассами Exception, нарушая правило языка.

java

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