Эта статья участвует"Проект "Звезда раскопок"", чтобы выиграть творческий подарочный пакет и бросить вызов творческим поощрительным деньгам.
Многие события не всегда развиваются гладко по собственному замыслу людей, и часто возникают те или иные нештатные ситуации. Например: вы планируете прогулку на выходных, планируете начать из дома → прибыть в пункт назначения → поплавать → приготовить барбекю → вернуться домой. Но случаются непредвиденные обстоятельства: когда вы готовитесь к шашлыку, внезапно идет сильный дождь, поэтому вам остается только прекратить вылазку и пораньше вернуться домой. «Сильный дождь» — это аномалия, и ваш план должен учитывать это, и должен быть план действий по устранению этой аномалии.
Компьютерные программы также написаны для обработки этих исключений. Exception (исключение) — нештатная ситуация, возникающая при запуске программы, ставшая одним из эталонов измерения зрелости языка. Текущий основной язык программирования java также предоставляет механизм обработки исключений.
Аномалия Введение
Исключение в Java, также известное как исключение, представляет собой событие, возникающее во время выполнения программы, которое прерывает нормальный поток инструкций исполняемой программы. Чтобы иметь возможность своевременно и эффективно обрабатывать ошибки времени выполнения в программе, необходимо использовать класс исключений, который может сделать программу чрезвычайно отказоустойчивой и более надежной.
Есть три основные причины для исключения в Java:
- Исключение внутренней ошибки Java, исключение, созданное виртуальной машиной Java.
- Исключение, генерируемое при ошибке в программном коде, например исключение пустого указателя, массив, аномалии и т. д.
- Исключения, сгенерированные вручную оператором 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 дней