Перейти к контенту

Подробно про обработку исключений Java

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

В этой статье, посвященной обработке исключений Java, я дам вам полное представление об основных принципах и различных методах их обработки.

 

Введение

Исключением является проблема, возникающая во время выполнения программы. Это может произойти по разным причинам, скажем:

  • Пользователь ввел неверные данные;
  • Файл не найден;
  • Сетевое соединение было потеряно в середине связи;
  • В JVM закончилась память.

Механизм обработки исключений следует потоку, который изображен на рисунке ниже. Но если исключение не обрабатывается, это может привести к сбою системы. Вот почему обработка исключения очень важна.

Поток исключений

 

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

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

пример обработки исключения

ОшибкиИсключения
 1. Невозможно восстановить после ошибки 1. Возможно восстановление из исключений
 2. Относятся к типу ‘unchecked’ 2. Исключения могут быть либо «проверенными», либо «непроверенными»
 3. Происходят во время выполнения 3. Может произойти во время компиляции или во время выполнения
 4. Вызваны средой выполнения приложения 4. Вызвано самим приложением

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

  • Проверенное исключение — это исключение, которое возникает во время компиляции, также называемое исключениями времени компиляции. Если какой-то код в методе выдает проверенное исключение, то метод должен либо обработать исключение, либо указать его с помощью ключевого слова throws.
  • Непроверенное исключение — это исключение, которое возникает во время выполнения. Они также называются исключениями времени выполнения. В C ++ все исключения не проверяются, поэтому компилятор не заставляет их обрабатывать или указывать исключение. Программисты должны определить или отловить исключения.

Пример

class Exception{
public static void main(String args[]){
try{
//code that may raise exception
}
catch(Exception e){
// rest of the program
  }
 }
}

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

Типы исключений

Встроенные

Встроенные исключенияОписание
  ArithmeticExceptionЕсли в арифметической операции возникло исключительное условие.
 ArrayIndexOutOfBoundsExceptionПоказывается, чтобы указать, что к массиву был получен доступ с незаконным индексом. Индекс либо отрицателен, либо больше или равен размеру массива.
 ClassNotFoundExceptionЭто исключение возникает, когда мы пытаемся получить доступ к классу, определение которого не найдено.
FileNotFoundExceptionКогда файл недоступен или не открывается.
IOExceptionПри сбое или прерывании операции ввода-вывода.
InterruptedExceptionКогда поток ждет, спит или выполняет какую-то обработку, и он прерывается.
NoSuchFieldExceptionЕсли класс не содержит указанного поля (или переменной).

Определяемые пользователем исключения

Пример:

class MyException extends Exception{ 
 String str1;
 MyException(String str2) {str1=str2;}
  public String toString(){
   return ("MyException Occurred: "+str1);
 }
}
class Example1{
public static void main(String args[]){
 try{
      System.out.println("Start of try block");
      throw new MyException(“Error Message");
    }
    catch(MyException exp){System.out.println("Catch Block");
    System.out.println(exp);
 }
}

Методы обработки исключений

Java предоставляет различные методы для обработки исключений, такие как:

  • try
  • catch
  • finally
  • throw
  • throws

Давайте разберемся с каждым из этих методов в деталях.

try block

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

try{
//code that may throw exception
}catch(Exception_class_Name ref){}

Вложенный блок try

Блок try внутри блока try известен как вложенный блок try в Java.

class Exception{
  public static void main(String args[]){
    try{
      try{
          System.out.println("going to divide");
          int b=59/0;
         }catch(ArithmeticException e){System.out.println(e);}
      try{
          int a[]=new int[5];
         a[5]=4;
         }
        catch(ArrayIndexOutOfBoundsException e) {System.out.println(e);}
            System.out.println("other statement);
        }catch(Exception e)
         {System.out.println("Exception handeled");}
       System.out.println("casual flow");
    }
}

catch блок

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

public class Testtrycatch1{
  public static void main(String args[]){
    int data=50/0;//may throw exception
    System.out.println("rest of the code...");
 }
}

Multi-catch блок

Если вам приходится выполнять различные задачи при возникновении различных исключений, вы можете использовать блок multi-catch.

public class SampleMultipleCatchBlock{
 public static void main(String args[]){
    try{
       int a[]=new int[5];
       a[5]=30/0;
      }
      catch(ArithmeticException e)
        {System.out.println("task1 is completed");}
      catch(ArrayIndexOutOfBoundsException e)
        {System.out.println("task 2 completed");}
      catch(Exception e)
        {System.out.println("task 3 completed");}
      System.out.println("remaining code");
  }
}

finally

Блок finally содержит все важные операторы, которые должны быть выполнены независимо от того, происходит исключение или нет. Операторы, присутствующие в этом блоке, всегда будут выполняться независимо от того, происходит ли исключение в блоке try или нет, например, при закрытии соединения, потоке и т. д.

class SampleFinallyBlock{
 public static void main(String args[]){
   try{
     int data=55/5;
     System.out.println(data);
    }
    catch(NullPointerException e)
       {System.out.println(e);} 
    finally {System.out.println("finally block is executed");}
    System.out.println("remaining code");
  }
}

Возможно, вы слышали, что final, finally и finalize — это ключевые слова в Java. Они отличаются друг от друга в разных аспектах.

finalfinallyfinalize
ключевое словоблокметод
Используется для применения ограничений на класс, методы и переменные.Используется для размещения важного кода.Используется для выполнения очистной обработки непосредственно перед сбором мусора с объекта.
final class  не может быть унаследован, метод не может быть переопределен и значение переменной не может быть изменено.Будет выполняться независимо от того, обрабатывается ли исключение или нет.

Сравнение throw и throws

throwthrows
 1. Используется для явного создания исключения 1. Используется для объявления исключения
 2. Проверенные исключения нельзя распространять только с помощью throw 2. Проверенные исключения могут быть распространены
 3. Далее следует выражение 3. Затем следует класс
 4. Используется в рамках метода 4. Используется с сигнатурой метода
 5. Невозможно создать несколько исключений 5. Можно объявить несколько исключений
//Java throw example
void a()
{
  throw new ArithmeticException("Incorrect");
}
//Java throws example
void a()throws ArithmeticException
{
  //method code
}
//Java throw and throws example
void a()throws ArithmeticException
{
  throw new ArithmeticException("Incorrect");
}

Оцени статью

Средняя оценка / 5. Количество голосов:

Спасибо, помогите другим - напишите комментарий, добавьте информации к статье.

Или поделись статьей

Видим, что вы не нашли ответ на свой вопрос.

Помогите улучшить статью.

 

Пока нет комментариев.

Добавить комментарий

Ваш e-mail не будет опубликован.

СайдбарКомментарии (0)