Рубрики

Проверено против непроверенных исключений в Java

В Java есть два типа исключений:

1) Проверено: исключения, которые проверяются во время компиляции. Если какой-то код внутри метода выдает проверенное исключение, тогда метод должен либо обработать исключение, либо указать его с помощью ключевого слова throws .

Например, рассмотрим следующую Java-программу, которая открывает файл в папке «C: /test/a.txt» и печатает первые три строки. Программа не компилируется, потому что функция main () использует FileReader (), а FileReader () генерирует проверенное исключение FileNotFoundException . Он также использует методы readLine () и close (), и эти методы также генерируют проверенное исключение IOException

import java.io.*;

  

class Main {

    public static void main(String[] args) {

        FileReader file = new FileReader("C:\\test\\a.txt");

        BufferedReader fileInput = new BufferedReader(file);

          

        // Вывести первые 3 строки файла "C: /test/a.txt"

        for (int counter = 0; counter < 3; counter++) 

            System.out.println(fileInput.readLine());

          

        fileInput.close();

    }

}

Выход:

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - 
unreported exception java.io.FileNotFoundException; must be caught or declared to be 
thrown
    at Main.main(Main.java:5)

Чтобы исправить вышеуказанную программу, нам нужно либо указать список исключений с помощью throws, либо нам нужно использовать блок try-catch. Мы использовали броски в приведенной ниже программе. Поскольку FileNotFoundException является подклассом IOException , мы можем просто указать IOException в списке бросков и сделать вышеописанную программу безошибочной.

import java.io.*;

  

class Main {

    public static void main(String[] args) throws IOException {

        FileReader file = new FileReader("C:\\test\\a.txt");

        BufferedReader fileInput = new BufferedReader(file);

          

        // Вывести первые 3 строки файла "C: /test/a.txt"

        for (int counter = 0; counter < 3; counter++) 

            System.out.println(fileInput.readLine());

          

        fileInput.close();

    }

}

Вывод: первые три строки файла «C: /test/a.txt»

2) Не проверены исключения, которые не проверяются во время компиляции. В C ++ все исключения не проверяются, поэтому компилятор не заставляет их обрабатывать или указывать исключение. Программисты должны быть цивилизованными и определять или ловить исключения.
В Java исключения в классах Error и RuntimeException являются непроверенными исключениями, все остальное в throwable проверяется.

                   +-----------+
           | Throwable |
                   +-----------+
                    /         \
           /           \
          +-------+          +-----------+
          | Error |          | Exception |
          +-------+          +-----------+
       /  |  \           / |        \
         \________/      \______/         \
                            +------------------+
    unchecked     checked    | RuntimeException |
                    +------------------+
                      /   |    |      \
                     \_________________/
                       
                       unchecked

Рассмотрим следующую Java-программу. Он прекрасно компилируется, но при запуске выдает исключение ArithmeticException . Компилятор позволяет его компилировать, потому что ArithmeticException является непроверенным исключением.

class Main {

   public static void main(String args[]) {

      int x = 0;

      int y = 10;

      int z = y/x;

  }

}

Выход:

Exception in thread "main" java.lang.ArithmeticException: / by zero
    at Main.main(Main.java:5)
Java Result: 1

Почему два типа?
Посмотрите Непроверенные Исключения — Противоречие для деталей.

Должны ли мы сделать наши исключения проверенными или непроверенными?
Ниже приводится нижняя строка из документов Java
Если от клиента можно ожидать восстановления после исключения, сделайте его проверенным исключением. Если клиент не может ничего сделать для восстановления из исключения, сделайте его непроверенным исключением

Java Уголок на GeeksforGeeks

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

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

Проверено против непроверенных исключений в Java

0.00 (0%) 0 votes