(I) Иерархия исключений Java
Чтобы понять разницу между проверенным исключением и неконтролируемым исключением в Java, давайте сначала рассмотрим иерархию исключения Java.
Это упрощенная схема иерархии исключений Java. Следует отметить, что все классы унаследованы от броска, а следующий слой делится на две структуры, ошибку и исключение. Уровень класса ошибок описывает внутренние ошибки и ошибки истощения ресурсов в системе времени выполнения Java. В дополнение к простому сообщению об этой ошибке пользователю и попытке предотвратить безопасное прекращение программы, в целом существуют другие решения.
(Ii) Разница между неконтролированным исключением и проверенным исключением
После понимания вышеизложенного, давайте посмотрим на то, что является проверенным исключением, и что является неконтролируемым исключением. Фактически, спецификация языка Java определяет эти два очень простых. Исключения, полученные из ошибок или runtimeexception, называются неконтролируемыми исключениями, и все другие исключения становятся проверенными исключениями . Хотя это определение очень простое, Runtimeexception - очень запутанная концепция. Кажется, что все наши исключения находятся в процессе запуска программы. Мое объяснение рубца в эффективной Java не так удовлетворительно.
Используйте проверенные исключения для восстановления условий и исключений времени выполнения для ошибок программирования (пункт 58 во 2 -м издании)
Однако из этого предложения мы можем просто расширить его, то есть, если происходит Runtimeexception, это должно быть проблемой для самого программиста. Например, абоненты массива находятся вне границ, доступа к исключениям по нулевым указателям и т. Д. Пока вы уделяете немного внимания, эти исключения являются исключениями, которых можно избежать на стадии кодирования. Если вы все еще думаете, что эти два понятия трудно различить, то «самый насильственный» метод состоит в том, чтобы запомнить общее runtimeexception, которое может сэкономить много времени для суждения.
(Iii) Почему мы должны различать неконтролируемые исключения и проверенные исключения?
Причина на самом деле очень проста. Компилятор проверит, предоставите ли вы механизм обработки исключений для всех проверенных исключений. Например, когда мы используем class.forname (), чтобы найти объект класса заданной строки, если обработка исключений не предусмотрена для этого метода, компиляция не будет передана.
(Iv) Какие исключения мы должны объявить?
Как мы уже говорили ранее, Runtimeexception - это ошибка, которую можно избежать во время процесса программирования. Так нам не нужно делать эти исключения? В принципе, это правда, но спецификация Java не ограничивает это. Кажется, что вы выкидываете массив из границ, и нет практического значения, и, наоборот, это вызовет определенные потери производительности. Итак, как мы должны разработать исключения для броска? Мы должны помнить, что следующие две ситуации необходимы для объявления исключений отбрасывания:
Вызовите метод проверенного исключения, например ioException. Что касается причины, мы обсуждали ранее, если все проверенные исключения были брошены, это не может быть составлено. Во время запуска программы была обнаружена ошибка, и исключение было брошено с использованием оператора Thr. Что касается неконтролируемых исключений, существует только две основные ситуации: либо можно избежать (исключение времени выполнения), либо неконтролируемое. Они также требуют объявления исключений.
Вот примеры, чтобы проиллюстрировать неловкие вещи, упомянутые в примечании 2 выше:
Во -первых, определите базовый класс исключений Genericexception, унаследованные от исключения.
Package check_unchecked_exceptions; открытый класс genericexception Excelles exection { / ** * * / private Static Long Long Serialversionuid = 2778045265121433720L; public generiCexception () {} public generiCexception (String msg) {super (msg); }} Следующее определяет тестовый класс VerifyException.
package check_unchecked_exceptions; public class verifyexception {public void first () бросает genericexception {throw new genericexception ("проверено исключение"); } public void Second (String msg) {if (msg == null) {бросить новое nullpointerException ("неконтролируемое исключение"); }} public void third () бросает genericexception {first (); } public static void main (string [] args) {verifyException ve = new verifyexception (); try {ve.first (); } catch (genericexception e) {e.printstacktrace (); } ve.second (null); }}После запуска получите следующую информацию о консоли Eclipse:
check_unchecked_exceptions.genericexception: проверено исключение
at check_unchecked_exceptions.verifyexception.first (verifyexception.java:6)
at check_unchecked_exceptions.verifyexception.main (verifyexception.java:23)
Исключение в потоке "Main" java.lang.nullPointerException: неконтролируемое исключение
at check_unchecked_exceptions.verifyexception.second (verifyexception.java:11)
at check_unchecked_exceptions.verifyexception.main (verifyexception.java:29)
В приведенном выше примере, в сочетании с понятиями проверенных и неконтролируемых, можно видеть, что исключение родительского класса имеет проверенный тип, но его подкласс Runtimeexception (подкласс NullPointerException) не является неконтролируемой.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.