Рубрики

Multicatch в Java

Фон

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

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

// Java-программа для демонстрации того, что нам нужно
// несколько блоков catch для нескольких исключений
// до Java 7

import java.util.Scanner;

public class Test

{

    public static void main(String args[])

    {

        Scanner scn = new Scanner(System.in);

        try

        {

            int n = Integer.parseInt(scn.nextLine());

            if (99%n == 0)

                System.out.println(n + " is a factor of 99");

        }

        catch (ArithmeticException ex)

        {

            System.out.println("Arithmetic " + ex);

        }

        catch (NumberFormatException ex)

        {

            System.out.println("Number Format Exception " + ex);

        }

    }

}

Вход 1:

GeeksforGeeks

Выход 2:

 Обнаружено исключение java.lang.NumberFormatException: 
Для входной строки: GeeksforGeeks 

Вход 2:

0

Выход 2:

 Обнаружено арифметическое исключение java.lang.ArithmeticException: / by zero 

Multicatch

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

// Java-программа для демонстрации мультипатча
// особенность

import java.util.Scanner;

public class Test

{

    public static void main(String args[])

    {

        Scanner scn = new Scanner(System.in);

        try

        {

            int n = Integer.parseInt(scn.nextLine());

            if (99%n == 0)

                System.out.println(n + " is a factor of 99");

        }

        catch (NumberFormatException | ArithmeticException ex)

        {

            System.out.println("Exception encountered " + ex);

        }

    }

}

Вход 1:

GeeksforGeeks

Выход 1:

 Обнаружено исключение java.lang.NumberFormatException:
Для входной строки: GeeksforGeeks 

Вход 2:

0

Выход 2:

 Обнаружено исключение 
java.lang.ArithmeticException: / ноль 

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

Важные моменты:

  • Если все исключения принадлежат одной и той же иерархии классов, мы должны перехватить базовый тип исключения. Однако, чтобы поймать каждое исключение, это должно быть сделано отдельно в их собственных блоках перехвата.
  • Один блок catch может обрабатывать несколько типов исключений. Однако исключения базового (или родительского) класса и подкласса (или потомка) не могут быть зафиксированы в одном операторе. Например
    // Not Valid as Exception is an ancestor of 
    // NumberFormatException
    catch(NumberFormatException | Exception ex) 
    
  • Все исключения должны быть разделены вертикальной чертой трубы | ,

Эта статья предоставлена Апарной Вадламани . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Multicatch в Java

0.00 (0%) 0 votes