Подробное объяснение обработки исключений Java (Exception) и распространенных исключений

Java задняя часть

Эта статья участвует"Проект "Звезда раскопок"", чтобы выиграть творческий подарочный пакет и бросить вызов творческим поощрительным деньгам.

Многие события не всегда развиваются гладко по собственному замыслу людей, и часто возникают те или иные нештатные ситуации. Например: вы планируете прогулку на выходных, планируете начать из дома → прибыть в пункт назначения → поплавать → приготовить барбекю → вернуться домой. Но случаются непредвиденные обстоятельства: когда вы готовитесь к шашлыку, внезапно идет сильный дождь, поэтому вам остается только прекратить вылазку и пораньше вернуться домой. «Сильный дождь» — это аномалия, и ваш план должен учитывать это, и должен быть план действий по устранению этой аномалии.

Компьютерные программы также написаны для обработки этих исключений. Exception (исключение) — нештатная ситуация, возникающая при запуске программы, ставшая одним из эталонов измерения зрелости языка. Текущий основной язык программирования java также предоставляет механизм обработки исключений.

Аномалия Введение

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

Есть три основные причины для исключения в Java:

  1. Исключение внутренней ошибки Java, исключение, созданное виртуальной машиной Java.
  2. Исключение, генерируемое при ошибке в программном коде, например исключение пустого указателя, массив, аномалии и т. д.
  3. Исключения, сгенерированные вручную оператором throw, обычно используются для информирования вызывающей стороны метода некоторой необходимой информации.

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

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

пример 1

Чтобы лучше понять, что такое исключение, давайте рассмотрим очень простую программу на Java. В следующем примере кода реализуется реализация, позволяющая пользователю вводить целое число в диапазоне от 1 до 3, в противном случае будет выдана ошибка ввода.

package io.renren.config;

import java.util.Scanner;
/**
 * Created by LiYangYong 
 */
public class TestException {
    public static void main(String[] args) {
        System.out.println("请输入您的选择:(1~3 之间的整数)");
        Scanner input = new Scanner(System.in);
        int num = input.nextInt();
        switch (num) {
            case 1:
                System.out.println("one");
                break;
            case 2:
                System.out.println("two");
                break;
            case 3:
                System.out.println("three");
                break;
            default:
                System.out.println("error");
                break;
        }
    }
}

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

请输入您的选择:(1~3 之间的整数)
223sdf
Exception in thread "main" java.util.InputMismatchException
	at java.util.Scanner.throwFor(Scanner.java:864)
	at java.util.Scanner.next(Scanner.java:1485)
	at java.util.Scanner.nextInt(Scanner.java:2117)
	at java.util.Scanner.nextInt(Scanner.java:2076)
	at io.renren.config.TestException.main(TestException.java:11)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

Process finished with exit code 1

Тип исключения

Чтобы иметь возможность своевременно и эффективно справляться с ошибками работы в программе, в Java специально вводится класс исключений. Все типы исключений в Java являются подклассами встроенного класса java.lang.Throwable, то есть Throwable находится на верхнем уровне иерархии классов исключений. В классе Throwable есть две ветки исключений Exception и Error, как показано на рисунке 1.

​ Как видно из рисунка 2, класс Throwable является суперклассом всех исключений и ошибок, и есть два подкласса, Error и Exception, которые представляют ошибки и исключения соответственно. Класс исключений Exception далее делится на исключения во время выполнения и исключения во время выполнения.Эти два исключения очень разные, также известные как непроверенные исключения и проверенные исключения.

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


В этом разделе не обсуждается обработка исключений в отношении типа Error, так как обычно это катастрофические фатальные ошибки, не зависящие от программы. Обработка исключений типа Exception обсуждается далее.

Исключения времени выполнения — это исключения класса RuntimeException и его подклассов, такие как NullPointerException, IndexOutOfBoundsException и т. д. Эти исключения являются непроверенными исключениями, и программа может выбирать, захватывать и обрабатывать их или нет. Эти исключения обычно вызываются логическими ошибками программы, и программа должна максимально избегать возникновения таких исключений с логической точки зрения.

Исключения, не относящиеся к среде выполнения, относятся к исключениям, отличным от RuntimeException, которые принадлежат классу Exception и его подклассам. С точки зрения синтаксиса программы это исключение, которое необходимо обрабатывать, иначе программа не может быть скомпилирована. Например, IOException, ClassNotFoundException и т. д., а также пользовательские исключения Exception (как правило, не настраивайте проверенные исключения).

В Таблице 1 и Таблице 2 перечислены типы и роли исключений во время выполнения и исключений во время выполнения, определенных в java.lang, соответственно.

тип исключения инструкция
ArithmeticException Исключение арифметической ошибки, например деление на ноль
ArraylndexOutOfBoundException индекс массива выходит за пределы
ArrayStoreException Присвоение элементам массива несовместимых типов
ClassCastException исключение преобразования типа
IllegalArgumentException Метод вызывается с недопустимыми аргументами
lIIegalStateException Среда или приложение находятся в неправильном состоянии
lIIegalThreadStateException Запрошенная операция несовместима с текущим состоянием потока.
IndexOutOfBoundsException Некоторый тип индекса выходит за пределы
NullPointerException Попытка доступа к члену нулевого объекта, исключение нулевого указателя
NegativeArraySizeException Массивы, созданные в отрицательном диапазоне
NumberFormatException Неправильный формат преобразования чисел, например, преобразование строки в тип с плавающей запятой недопустимо.
TypeNotPresentException тип не найден
тип исключения инструкция
ClassNotFoundException класс не найден
IllegalAccessException Доступ к классу запрещен
InstantiationException Попытка создать объект абстрактного класса или интерфейса
InterruptedException Тема была прервана другой нитью
NoSuchFieldException Запрашиваемый домен не существует
NoSuchMethodException Запрошенный метод не существует
ReflectiveOperationException Суперкласс для исключений, связанных с отражением

Хорошо, давайте сегодня поделимся этим здесь, я Сяо Ао, увидимся в следующем выпуске~~

Обновление статьи о пунше76/ 100 дней