Проверенные и непроверенные исключения в Java

Опубликовано: 15 Февраля, 2022

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

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

For example, consider the following Java program that opens file at location “C: esta.txt” and prints the first three lines of it. The program doesn’t compile, because the function main() uses FileReader() and FileReader() throws a checked exception FileNotFoundException. It also uses readLine() and close() methods, and these methods also throw checked exception 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);
          
        // Print first 3 lines of file "C: esta.txt"
        for (int counter = 0; counter < 3; counter++) 
            System.out.println(fileInput.readLine());
          
        fileInput.close();
    }
}

Выход:

 Исключение в потоке "main" java.lang.RuntimeException: некомпилируемый исходный код - 
незарегистрированное исключение java.io.FileNotFoundException; должен быть пойман или объявлен 
брошенный
    в Main.main (Main.java:5)

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

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

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

                   + ----------- +
           | Метательный |
                   + ----------- +
                    / 
           / 
          + ------- + + ----------- +
          | Ошибка | | Исключение |
          + ------- + + ----------- +
       / |  / | 
          ________ /  ______ / 
                            + ------------------ +
    не отмечен отмечен | RuntimeException |
                    + ------------------ +
                      / | | 
                      _________________ /
                       
                       не отмечен

Consider the following Java program. It compiles fine, but it throws ArithmeticException when run. The compiler allows it to compile, because ArithmeticException is an unchecked exception.

class Main {
   public static void main(String args[]) {
      int x = 0;
      int y = 10;
      int z = y/x;
  }
}

Выход:

 Исключение в потоке "main" java.lang.ArithmeticException: / по нулю
    в Main.main (Main.java:5)
Результат Java: 1

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

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

Уголок Java на GeeksforGeeks

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

Вниманию читателя! Не переставай учиться сейчас. Ознакомьтесь со всеми важными концепциями Java Foundation и коллекций с помощью курса "Основы Java и Java Collections" по доступной для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .