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

⚡ Умное резюме

Java Обработка исключений предоставляет структурированный механизм для управления ошибками времени выполнения, нарушающими нормальный ход выполнения программы. Она использует ключевые слова try, catch, finally, throw и throws для обнаружения, изоляции и восстановления после исключительных ситуаций, сохраняя при этомping Приложения надежны и предсказуемы.

  • ⚠️ Исключение определено: Исключение — это событие времени выполнения, которое прерывает стандартную последовательность выполнения и представляется в виде объекта, описывающего состояние ошибки.
  • 🧯 Блок try-catch: Оберните рискованный код в блок try и добавьте после него один или несколько блоков catch для корректной обработки исключений определенных типов.
  • 🔁 Наконец, поведение: Блок finally всегда выполняется после блоков try и catch, что делает его идеальным для закрытия файлов, сокетов или освобождения других системных ресурсов.
  • Иерархия исключений: Все исключения наследуются от класса Throwable, который, в свою очередь, разветвляется на Error и Exception, а RuntimeException охватывает непроверяемые случаи, такие как деление на ноль.
  • 🧪 лучшие практики: Сначала перехватывайте наиболее специфичное исключение, избегайте пустых блоков catch, записывайте содержательные сообщения в лог и используйте множественный перехват (multi-catch), чтобы код оставался лаконичным и удобным для сопровождения.

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

Что является исключением в Java?

An Исключение в Java Это событие, которое прерывает выполнение инструкций программы и нарушает нормальный ход её выполнения. Это объект, который инкапсулирует информацию об ошибке, произошедшей внутри метода, и передаёт её в систему выполнения. JavaИсключения в основном используются для сигнализации о различных типах ошибок, чтобы разработчики могли реагировать на них контролируемым образом.

В литературе можно выделить две основные категории ошибок. Java:

  1. Ошибки времени компиляции
  2. Ошибки выполнения

Ошибки компиляции можно разделить на два дополнительных типа:

  • Ошибки синтаксиса
  • Семантические ошибки

Пример синтаксических ошибок:

Вместо объявления int a; вы по ошибке заявили это как in a;в связи с чем компилятор выдаст ошибку.

Пример семантических ошибок: Вы объявили переменную int a; и после нескольких строк кода вы снова объявляете целое число как int a;. Все эти ошибки подсвечиваются при компиляции кода.

Пример ошибок во время выполнения

Ошибка времени выполнения называется ИсключениеИсключения — это любые события, которые прерывают нормальный ход выполнения программы. Примеры исключений включают арифметическое исключение, NullPointerException, исключение деления на ноль и многие другие. Исключения в Java Это условия, которые часто находятся вне прямого контроля разработчика.

Нажмите здесь если видео недоступно

Зачем нам нужна обработка исключений?

Предположим, вы написали программу для доступа к серверу. Всё работает отлично, пока вы занимаетесь разработкой.ping код в локальной среде с контролируемыми условиями.

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

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

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

Как обработать исключение в Java

До сих пор мы видели, что исключения часто находятся вне контроля разработчика. Однако сваливать вину за сбой кода на проблемы окружающей среды — не настоящее решение. Необходимо надежное программирование, которое учитывает исключительные ситуации. Такой код известен как Обработчик исключений.

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

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

Для реализации этого можно написать код для подключения к серверу, используя традиционные условия if и else. Вы будете проверять, недоступен ли сервер, и если да, то напишете код для подключения к резервному серверу. Такая организация кода с использованием ветвей «if» и «else» неэффективна, когда ваш код содержит несколько ветвей. Java Исключения обрабатывать.

class connect{
	if(Server Up){
	 // code to connect to server
	}
	else{
	 // code to connect to BACKUP server
	}
}

Попробуйте блокировку Try Catch в Java

Java Предоставляет встроенный механизм обработки исключений, который разделяет обычную логику и логику восстановления после ошибок.

  1. Обычный код переходит в TRY блок.
  2. Код обработки исключений попадает в CATCH блок.

Попробуйте Catch Block

В нашем примере блок TRY будет содержать код для подключения к серверу. Блок CATCH будет содержать код для подключения к резервному серверу. Если сервер работает, код в блоке CATCH будет проигнорирован. Если сервер не работает, будет сгенерировано исключение, и код в блоке CATCH будет выполнен.

Попробуйте Catch Block

Итак, вот как обрабатывается исключение в Java.

Синтаксис использования конструкции try и catch.

try{
    statement(s)
}
catch (exceptiontype name){
	statement(s)
}

Пример блока try-catch

Шаг 1) Скопируйте следующий код в редактор.

class JavaException {
   public static void main(String args[]){
      int d = 0;
      int n = 20;
      int fraction = n/d;
     System.out.println("End Of Main");
   }
}

Шаг 2) Сохраните файл и скомпилируйте код. Запустите программу с помощью команды `java`. JavaИсключение.

Шаг 3) В строке 5 отображается арифметическая ошибка, связанная с делением на ноль, а строка 6 никогда не выполняется.

Шаг 4) Теперь давайте рассмотрим, как конструкции try и catch помогут нам обработать это исключение. Мы поместим строку кода, вызвавшую исключение, в блок кода. стараться блок, за которым следует поймать блокировать. Скопируйте следующий код в редактор.

class JavaException {
 public static void main(String args[]) {
  int d = 0;
  int n = 20;
  try {
   int fraction = n / d;
   System.out.println("This line will not be Executed");
  } catch (ArithmeticException e) {
   System.out.println("In the catch Block due to Exception = " + e);
  }
  System.out.println("End Of Main");
 }
}

Шаг 5) Сохраните, скомпилируйте и запустите код. Вы получите следующий результат.

Попробуйте Catch Block

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

Примечание: Объект ArithmeticException «e» содержит информацию о возникшем исключении, что может быть полезно при выполнении восстановительных действий.

Java Иерархия классов исключений

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

Java Иерархия исключений

  • Все классы исключений в Java Класс Throwable расширяет класс Throwable. У класса Throwable есть два подкласса: Error и Exception.
  • Класс Error определяет исключения или проблемы, которые не ожидаются при нормальных обстоятельствах в вашей программе, например, ошибка памяти, аппаратная ошибка или ошибка JVM.
  • Класс Exception представляет собой исключения, которые может обрабатывать ваша программа, и ваша программа может восстанавливаться после этих исключений, используя блоки try и catch.
  • RuntimeException — это подкласс класса Exception. Исключения этого типа представляют собой неконтролируемые исключения, возникающие во время выполнения и не обнаруживаемые на этапе компиляции. Хорошими примерами являются исключение деления на ноль и исключение нулевого указателя.
  • Исключение IOException возникает во время операций ввода и вывода.
  • Прерванное исключение в Java Эта ошибка возникает во время многопоточных операций при прерывании потока.

Пример: Вложенность блоков try и catch.

Шаг 1) Скопируйте следующий код в редактор.

class JavaException {
 public static void main(String args[]) {
  try {
   int d = 1;
   int n = 20;
   int fraction = n / d;
   int g[] = {
    1
   };
   g[20] = 100;
  }
  /*catch(Exception e){
  	System.out.println("In the catch block due to Exception = "+e);
  }*/
  catch (ArithmeticException e) {
   System.out.println("In the catch block due to Exception = " + e);
  } catch (ArrayIndexOutOfBoundsException e) {
   System.out.println("In the catch block due to Exception = " + e);
  }
  System.out.println("End Of Main");
 }
}

Шаг 2) Сохраните файл и скомпилируйте код. Запустите программу с помощью команды. Ява JavaИсключение.

Шаг 3) Возникает исключение ArrayIndexOutOfBoundsException. Измените значение int d на 0. Сохраните, скомпилируйте и запустите код.

Шаг 4) Необходимо сгенерировать исключение ArithmeticException.

Шаг 5) Раскомментируйте строки с 10 по 12. Сохраните, скомпилируйте и запустите код.

Шаг 6) Ошибка компиляции? Это происходит потому, что Exception является базовым классом для ArithmeticException. Любое исключение, возникающее в ArithmeticException, также может быть обработано классом Exception. Поэтому блок catch класса ArithmeticException никогда не получит возможности выполниться, что делает его избыточным. Отсюда и ошибка компиляции.

Java Наконец заблокируйте

Последний блок выполняется независимо от возникновения исключения в блоке try. Это необязательный Используется с блоком try. Блок finally — это подходящее место для освобождения ресурсов, таких как подключения к базе данных, файлы или сетевые сокеты.

 try {
  statement(s)
 } catch (ExceptiontType name) {

  statement(s)

 } finally {

  statement(s)

 }

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

Пример блока finally

Шаг 1) Скопируйте следующий код в редактор.

class JavaException {
   public static void main(String args[]){
    try{
       int d = 0;
       int n =20;
       int fraction = n/d;
    }
  catch(ArithmeticException e){
    System.out.println("In the catch block due to Exception = "+e);
  }
  finally{
	System.out.println("Inside the finally block");
  }
}
}

Шаг 2) Сохраните, скомпилируйте и запустите код.

Шаг 3) Ожидаемый результат: Блок finally выполняется, несмотря на возникновение исключения.

Шаг 4) Измените значение переменной d на 1. Сохраните, скомпилируйте и запустите код, затем посмотрите на результат.

Передовые методы для Java Обработка исключений

Следуя нескольким проверенным правилам, вы сможете сохранить свои Java Код отказоустойчивый, читаемый и легко отлаживаемый:

  • Для сохранения целостности иерархии исключений сначала перехватывайте наиболее специфические исключения, а затем более общие.
  • Избегайте пустых блоков catch. Как минимум, регистрируйте исключение в журнале, чтобы никогда не упустить первопричину.
  • Используйте блок finally или try with resources для освобождения файлов, сокетов и подключений к базе данных.
  • Проверяемые исключения следует генерировать только в том случае, если вызывающая сторона может разумно восстановить работу системы, а непроверяемые исключения использовать для ошибок программирования.
  • Оберните низкоуровневые исключения в осмысленные бизнес-исключения, чтобы сохранить совместимость API.tracВсё чисто.
  • В многопоточном коде никогда не следует молча подавлять исключение InterruptedException, вместо этого необходимо восстановить флаг прерывания.

Часто задаваемые вопросы (FAQ)

Проверяемые исключения проверяются во время компиляции и должны быть объявлены или перехвачены, например, IOException. Непроверяемые исключения наследуют RuntimeException, возникают во время выполнения и не требуют обязательной обработки, например, NullPointerException или ArithmeticException.

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

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

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

Да. Инструменты мониторинга на основе ИИ анализируют стек технологий. tracАнализируя журналы ошибок и пути выполнения кода, можно предсказать, где, вероятно, возникнут исключения во время выполнения. Предлагаются защитные проверки, рекомендации по размещению обработчиков исключений, а также выявляются аномалии и другие проблемы.ping Команды предотвращают сбои до того, как они попадут в производство.

Искусственные интеллектуальные помощники анализируют стек tracОни сопоставляют их с исходным кодом и предлагают вероятные первопричины и способы их устранения. Они генерируют шаблоны try-catch, рекомендуют улучшения в логировании и даже переписывают неисправные методы, значительно сокращая время, которое разработчики тратят на диагностику. Java исключения.

Подведем итог этой публикации следующим образом: