Учебники

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

Что такое исключение?

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

В этом уроке вы узнаете

Есть два типа ошибок:

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

Ошибки времени компиляции могут быть снова классифицированы на два типа:

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

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

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

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

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

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

Примером исключений являются: арифметическое исключение, исключение нулевого указателя, деление на ноль исключения и т. Д.

Исключения в Java находятся вне контроля разработчиков.

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

Зачем нам нужно исключение?

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

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

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

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

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

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

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

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

Для этого введите свой код для подключения к серверу (используя традиционные условия if и else).

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

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

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

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

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

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

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

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

Если сервер работает, код в блоке CATCH будет игнорироваться. Если сервер не работает, возникает исключение, и код в блоке catch будет выполнен.

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

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

Синтаксис использования try & catch

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

пример

Шаг 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) Сохраните файл и скомпилируйте код. Запустите программу, используя команду JavaException

Шаг 3) Арифметическое исключение — деление на ноль показано, как показано ниже для строки № 5, а строка № 6 никогда не выполняется

Шаг 4) Теперь давайте посмотрим, как try и catch помогут нам справиться с этим исключением. Мы поместим исключение, вызывающее строку кода в блок 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) Сохраните, скомпилируйте и запустите код. Вы получите следующий вывод

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

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

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

Java Exception class Hierarchy

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

Руководство по иерархии исключений Java

  • Все классы исключений в Java расширяют класс Throwable. Throwable имеет два подкласса: ошибка и исключение
  • Класс Error определяет исключение или проблемы, которые не должны возникать в обычных условиях в нашей программе, например ошибка памяти, ошибка оборудования, ошибка JVM и т. Д.
  • Класс Exception представляет исключения, которые могут быть обработаны нашей программой, и наша программа может быть восстановлена ​​из этого исключения, используя блок try и catch
  • Исключение времени выполнения является подклассом класса исключения. Исключение этого типа представляет исключение, которое происходит во время выполнения и которое не может быть отслежено во время компиляции. Отличный пример того же — деление на ноль или исключение нулевого указателя и т. Д.
  • IO исключение генерируется во время операций ввода и вывода
  • Прерванные исключения в 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) Сохраните файл и скомпилируйте код. Запустите программу, используя команду JavaException .

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

Шаг 4 ) Должно быть сгенерировано исключение ArithmeticException.

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

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

Java, наконец, блок

Блок finally выполняется независимо от возникновения исключения в блоке try. Это необязательно использовать с Ьгой блоком.

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

  statement(s)

 } finally {

  statement(s)

 }

В случае возникновения исключения в блоке try блок finally выполняется после выполнения блока catch.

пример

Шаг 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) Ожидаемый результат. Наконец, блок выполняется, хотя возбуждается исключение.

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

Резюме :

  • Исключением является ошибка времени выполнения , которое прерывает нормальный поток программы execution.Disruption во время выполнения программы, называется , как ошибки или исключения.
  • Ошибки делятся на две категории
    • Ошибки времени компиляции — синтаксические ошибки, семантические ошибки
    • Ошибки во время выполнения — исключение
  • Надежная программа должна обрабатывать все исключения и по- прежнему с нормальным потоком выполнения программы. Java предоставляет встроенный исключительный метод обработки
  • Exception Handler — это набор кода, который обрабатывает исключение . Исключения могут быть обработаны в Java с помощью try & catch.
  • Попробуйте блок : нормальный код идет на этот блок.
  • Блок Catch : если в нормальном коде есть ошибка, он перейдет в этот блок