14

Каковы исключения времени выполнения и те, которые проверены/не отмечены Исключения и разница между ошибкой/исключением. Почему эти много типов? Вместо этого Java может просто следовать простому дизайну (просто попробовать/уловить все типы), чтобы обрабатывать ненормальное состояние в программе?Различия между Runtime/Checked/Unchecked/Error/Exception

+0

Вы прочитали урок [Sun Java Tutorials on exceptions] (http://java.sun.com/docs/books/tutorial/essential/exceptions/)? Это, вероятно, хорошее место для начала. –

ответ

27

Throwable находится на вершине всех исключений. Под Throwable у вас есть ошибка и исключение. Under Exception Exception у вас есть RuntimeException.

Java имеет два типа исключений - проверяется и не проверяется. Проверенные исключения выполняются компилятором (вы должны объявить их в предложении throws и в конечном итоге поймать их). Исключенные исключения не применяются для ловушки или объявления в предложении throws.

(Спорная часть ответа)

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

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

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

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

3

@ Ответ TofuBeer объясняет, что означают классы исключений.

Why these many types? Instead Java may simply follow a simple design(just try/catch all types) to handle an abnormal condition in a program?

Почему? Потому что они необходимы! Без этих 4 классов обработка исключений по широкой категории была бы непрактичной.

  • Как вы поймаете «все фатальные ошибки JVM» без класса Error?
  • Как вы поймаете «все исключения, которые не являются фатальными ошибками JVM» без класса Exception?
  • Как вы поймаете «все непроверенные исключения» без класса RuntimeException?
0

Runtime Exceptions предоставляют вам гибкость, позволяющую избежать ловушки, объявляя об исключениях.

+2

Да, как будто не поймать исключение и просто позволить ему убить нить, это приемлемое решение. – Bombe

+0

В некоторых случаях это так. – Sid

+0

Обычно это означает, что Bad Idea® генерирует собственное 'RuntimeException'. Делайте это с осторожностью, а не только как ярлык. –

16

Поскольку я новый разработчик Java, у меня также возникли некоторые трудности для различения и обработки различных типов исключений. Вот почему я сделал короткую заметку по этой теме, и всякий раз, когда я смущаюсь, я просматриваю ее. Здесь с изображением иерархии Throwable класса:
Throwable Class Hierarchy

[Изображение предоставлено JavaTpoint].

Здесь необходимо запомнить три ключевых класса: Throwable, Exception и Error. Среди этих классов Exception можно разделить на два типа: «Проверено исключение» и «Непроверенное исключение».

Проверено Исключение:

  • Эти классы, расширяющие Throwable кроме RuntimeException и Error.
  • Они также известны как исключения времени компиляции, поскольку они проверяются во время компиляции, что означает, что компилятор заставляет нас либо обрабатывать их с помощью try/catch, либо указать в сигнатуре функции, что это throws, и заставить нас иметь дело с ними в вызывающем ,
  • Это программно восстанавливаемые проблемы, вызванные неожиданными условиями вне контроля кода (например, сбой базы данных, ошибка ввода-вывода файла, неправильный ввод и т. Д.).
  • Пример:IOException, SQLException и т.д.

Неконтролируемое Исключение:

  • Классов, расширяющие RuntimeException известны как непроверенные исключения.
  • Непроверенные исключения не проверяются во время компиляции, а скорее во время выполнения, отсюда и название.
  • Они также являются программно восстанавливаемыми проблемами, но в отличие от проверенных исключений они вызваны ошибками в потоке или конфигурации кода.
  • Пример:ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException и т.д.
  • Поскольку они ошибки программирования, их можно избежать, красиво/благоразумно кодирования. Например, «деление на ноль» создает ArithmeticException, чего можно избежать простой проверкой на делителе. Аналогичным образом мы можем избежать NullPointerException, просто проверив ссылки: if (object != null) или даже используя better techniques.

Ошибка:

  • Error относится к невозвратным ситуациям, которая не обрабатываются с помощью try/catch.
  • Пример:OutOfMemoryError, VirtualMachineError, AssertionError и т.д.

Почему это много типов?

В дополнение к ответу Stephen C Я хочу сказать: Обработка исключений - относительно дорогостоящая операция на Java. Мы не должны ставить всю исключительную ситуацию в блок try/catch.Чрезмерное использование try/catch s может затруднить выполнение программы.

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

+0

+1 для приятного изображения. Sidenote: не совсем правильно, что «Ошибка» не увлекательна. Никто не мешает вам писать 'try {sometching(); } catch (Ошибка e) {} ', но на самом деле это плохая идея (см. [ответ @ TofuBeer] (https://stackoverflow.com/a/3162916/2448440)). – Qw3ry

0
  • Ошибка (броски VM, не должны быть пойманы или обработаны)
    1. VM Error
    2. Assertion Ошибка
    3. Рычажный Ошибка ... так далее
  • Продолжительность/Uncheck Исключение (ошибка программирования не должна быть обнаружена или обработана)
    1. NullPointerException
    2. ArrayIndexOutOfBoundException
    3. IllegalArgumentException ... так далее
  • Check Exception (Anything Else, приложения, как ожидается, будут пойманы или обработаны)
    1. IOException
    2. FileNotFoundException
    3. SQLException ... и так далее

 Смежные вопросы

  • Нет связанных вопросов^_^