Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Java — исключения

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

Исключение может возникнуть по разным причинам. Ниже приведены некоторые сценарии, в которых возникает исключение.

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

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

Например, если вы используете FileReader класс в вашей программе для чтения данных из файла, если файл, указанный в его конструкторе, не существует, то FileNotFoundException происходит, и компилятор предлагает программисту обработать исключение.

Пример

Живая демонстрация
01

Если вы попытаетесь скомпилировать приведенную выше программу, вы получите следующие исключения.

Вывод

10 

Примечание − Поскольку методы read() и закрыть() класса FileReader вызывает IOException, вы можете заметить, что компилятор уведомляет об обработке IOException вместе с FileNotFoundException.

  • Неотмеченные исключения − Непроверенное исключение — это исключение, возникающее во время выполнения. Их также называют исключениями во время выполнения. . К ним относятся программные ошибки, такие как логические ошибки или неправильное использование API. Исключения во время выполнения игнорируются во время компиляции.

Например, если вы объявили в своей программе массив размером 5 и пытаетесь вызвать 6 th элемент массива, затем исключение ArrayIndexOutOfBoundsExceptionException происходит.

Пример

Живая демонстрация
28

Если вы скомпилируете и запустите приведенную выше программу, вы получите следующее исключение.

Вывод

32
  • Ошибки − Это вовсе не исключения, а проблемы, возникающие вне контроля пользователя или программиста. Ошибки обычно игнорируются в вашем коде, потому что вы редко можете что-то сделать с ошибкой. Например, если произойдет переполнение стека, возникнет ошибка. Они также игнорируются во время компиляции.

Иерархия исключений

Все классы исключений являются подтипами класса java.lang.Exception. Класс исключений является подклассом класса Throwable. Помимо класса исключений, существует еще один подкласс, называемый Error, который является производным от класса Throwable.

Ошибки — это ненормальные состояния, возникающие в случае серьезных сбоев, они не обрабатываются программами Java. Ошибки генерируются для указания на ошибки, генерируемые средой выполнения. Пример:JVM не хватает памяти. Обычно программы не могут восстановиться после ошибок.

Класс Exception имеет два основных подкласса:класс IOException и класс RuntimeException.

Ниже приведен список наиболее распространенных проверенных и непроверенных встроенных исключений Java.

Методы исключений

Ниже приведен список важных методов, доступных в классе Throwable.

<тд>

общедоступная строка getMessage()

Возвращает подробное сообщение о возникшем исключении. Это сообщение инициализируется в конструкторе Throwable.

<тд>

общедоступная вызываемая функция getCause()

Возвращает причину исключения, представленную объектом Throwable.

<тд>

общедоступная строка toString()

Возвращает имя класса, объединенного с результатом getMessage().

<тд>

public void printStackTrace()

Выводит результат toString() вместе с трассировкой стека в System.err, поток вывода ошибок.

<тд>

public StackTraceElement [] getStackTrace()

Возвращает массив, содержащий каждый элемент трассировки стека. Элемент с индексом 0 представляет вершину стека вызовов, а последний элемент массива представляет метод в нижней части стека вызовов.

<тд>

общедоступный Throwable fillInStackTrace()

Заполняет трассировку стека этого объекта Throwable текущей трассировкой стека, добавляя к любой предыдущей информации в трассировке стека.

Сер.№ Метод и описание
1
2
3
4
5
6

Перехват исключений

Метод перехватывает исключение, используя комбинацию try и поймать ключевые слова. Блок try/catch размещается вокруг кода, который может генерировать исключение. Код в блоке try/catch называется защищенным кодом, а синтаксис использования try/catch выглядит следующим образом —

Синтаксис

40

Код, который подвержен исключениям, помещается в блок try. Когда возникает исключение, оно обрабатывается связанным с ним блоком catch. За каждым блоком try должен сразу же следовать либо блок catch, либо блок finally.

Оператор catch включает объявление типа исключения, которое вы пытаетесь перехватить. Если в защищенном коде возникает исключение, проверяется блок (или блоки) catch, следующие за попыткой. Если тип возникшего исключения указан в блоке catch, исключение передается в блок catch так же, как аргумент передается в параметр метода.

Пример

Ниже приведен массив, объявленный с двумя элементами. Затем код пытается получить доступ к 3 rd элемент массива, вызывающий исключение.

Живая демонстрация
58

Это даст следующий результат —

Вывод

61

Несколько блоков захвата

За блоком try может следовать несколько блоков catch. Синтаксис для нескольких блоков catch выглядит следующим образом:

Синтаксис

73

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

Пример

Вот фрагмент кода, показывающий, как использовать несколько операторов try/catch.

89

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

Начиная с Java 7 вы можете обрабатывать более одного исключения, используя один блок catch, эта функция упрощает код. Вот как бы вы это сделали —

99

Броски/Ключевые слова Throw

Если метод не обрабатывает проверенное исключение, метод должен объявить его с помощью throws ключевое слово. Ключевое слово throws появляется в конце сигнатуры метода.

Вы можете сгенерировать исключение, либо только что созданное, либо только что перехваченное, с помощью throw ключевое слово.

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

Следующий метод объявляет, что он генерирует исключение RemoteException —

Пример

107

Метод может объявить, что он генерирует более одного исключения, и в этом случае исключения объявляются в списке, разделенном запятыми. Например, следующий метод объявляет, что он генерирует RemoteException и InsufficientFundsException —

Пример

114

Окончательный блок

Блок finally следует за блоком try или блоком catch. Блок finally всегда выполняется независимо от возникновения исключения.

Использование блока finally позволяет запускать любые операторы очистки, которые вы хотите выполнить, независимо от того, что происходит в защищенном коде.

Блок finally появляется в конце блоков catch и имеет следующий синтаксис —

Синтаксис

129

Пример

Живая демонстрация
134

Это даст следующий результат —

Вывод

146

Обратите внимание на следующее —

  • Предложение catch не может существовать без оператора try.

  • Не обязательно иметь предложения finally всякий раз, когда присутствует блок try/catch.

  • Блок try не может присутствовать без предложения catch или finally.

  • Никакой код не может находиться между блоками try, catch, finally.

Попытка использования ресурсов

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

Пример

159

попробовать-с-ресурсами , также называемое автоматическое управление ресурсами , — это новый механизм обработки исключений, представленный в Java 7, который автоматически закрывает ресурсы, используемые в блоке try catch.

Чтобы использовать этот оператор, вам просто нужно объявить требуемые ресурсы в скобках, и созданный ресурс будет автоматически закрыт в конце блока. Ниже приведен синтаксис оператора try-with-resources.

Синтаксис

165

Ниже приведена программа, которая считывает данные из файла с помощью оператора try-with-resources.

Пример

179

При работе с оператором try-with-resources необходимо помнить о следующих моментах.

  • Чтобы использовать класс с оператором try-with-resources, он должен реализовать AutoCloseable. интерфейс и close() его метод вызывается автоматически во время выполнения.

  • Вы можете объявить более одного класса в операторе try-with-resources.

  • Пока вы объявляете несколько классов в блоке try оператора try-with-resources, эти классы закрываются в обратном порядке.

  • За исключением объявления ресурсов в круглых скобках, все аналогично обычному блоку try/catch в блоке try.

  • Ресурс, объявленный в блоке try, создается непосредственно перед началом блока try.

  • Ресурс, объявленный в блоке try, неявно объявляется окончательным.

Пользовательские исключения

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

  • Все исключения должны быть дочерними по отношению к Throwable.

  • Если вы хотите написать проверенное исключение, которое автоматически применяется правилом обработки или объявления, вам необходимо расширить класс Exception.

  • Если вы хотите написать исключение времени выполнения, вам необходимо расширить класс RuntimeException.

Мы можем определить наш собственный класс исключений, как показано ниже —

186

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

Пример

197

Чтобы продемонстрировать использование нашего пользовательского исключения, следующий класс CheckingAccount содержит метод remove(), который создает исключение InsufficientFundsException.

202

Следующая программа BankDemo демонстрирует вызов методов депозита() и снятия() CheckingAccount.

219

Скомпилируйте все три вышеуказанных файла и запустите BankDemo. Это даст следующий результат —

Вывод

229

Общие исключения

В Java можно определить две категории исключений и ошибок.

  • Исключения JVM − Это исключения/ошибки, которые исключительно или логически выдаются JVM. Примеры:NullPointerException, ArrayIndexOutOfBoundsException, ClassCastException.

  • Программные исключения − Эти исключения явно создаются приложением или программистами API. Примеры:IllegalArgumentException, IllegalStateException.


java

  1. Операторы Java
  2. Java-комментарии
  3. Java для каждого цикла
  4. Java-строки
  5. Обработка исключений Java
  6. Java бросает и бросает
  7. Java перехватывает несколько исключений
  8. Java-проба с ресурсами
  9. Java-аннотации
  10. Утверждения Java