Я пытаюсь узнать больше о базовой Java и разных типах Throwables, может ли кто-нибудь сообщить мне о различиях между исключениями и ошибками?
Различия между Исключением и ошибкой
Ответ 1
Ошибки не должны быть пойманы или обработаны (за исключением самых редких случаев). Исключения составляют хлеб и масло обработки исключений. Javadoc хорошо объясняет:
Ошибка - это подкласс Throwable, который указывает на серьезные проблемы, которые разумное приложение не должно пытаться поймать. Большинство таких ошибок являются ненормальными условия.
Посмотрите на несколько подклассов Error, взяв некоторые из своих комментариев JavaDoc:
-
AnnotationFormatError- Выбрасывается, когда парсер аннотации пытается прочитать аннотацию из файла класса и определяет, что аннотация неверна. -
AssertionError- Брошено, чтобы указать, что утверждение не выполнено. -
LinkageError- Подклассы LinkageError показывают, что класс имеет некоторую зависимость от другого класса; однако последний класс несовместимо изменился после компиляции прежнего класса. -
VirtualMachineError- Брошено указывать, что виртуальная машина Java повреждена или у нее закончились ресурсы, необходимые для продолжения работы.
Существуют действительно три важные подкатегории Throwable:
-
Error- Что-то достаточно серьезное пошло не так, что большинство приложений должны сработать, а не попытаться решить проблему, - Unchecked Exception (aka
RuntimeException) - Очень часто ошибка программирования, такая какNullPointerExceptionили незаконный аргумент. Приложения иногда могут обрабатывать или восстанавливать из этой категорииThrowable- или, по крайней мере, улавливать ее при методе Threadrun(), регистрировать жалобу и продолжать работу. - Проверено исключение (также как и все остальное). Ожидается, что приложения смогут поймать и осмысленно сделать что-то с остальными, например
FileNotFoundExceptionиTimeoutException...
Ответ 2
Ошибки, как вы знаете, указывают на конец вашего приложения. Он обычно не может быть восстановлен и должен заставить вашу виртуальную машину выйти. Ловить их не следует, кроме как, возможно, журнала или отображения и соответствующего сообщения перед выходом.
Пример: OutOfMemoryError - мало что можно сделать, поскольку ваша программа больше не может работать.
Исключения часто восстанавливаются, и даже если нет, они обычно означают, что попытка не удалась, но ваша программа все еще может продолжать.
Пример: IllegalArgumentException. Передал недопустимые данные методу, чтобы вызов метода не удался, но он не влияет на будущие операции.
Это упрощенные примеры, и есть еще одна информация о только исключениях.
Ответ 3
Этот слайд, показывающий иерархию исключений Java @georgios-gousios, вкратце объясняет различия между ошибками и исключениями в Java.
Ответ 4
Sun ставит его лучше:
Ошибка - это подкласс Throwable что указывает на серьезные проблемы, которые разумное приложение не должно пытаться ловить.
Ответ 5
Описание класса Error довольно понятно:
An
Errorявляется подклассомThrowableчто указывает на серьезные проблемы, которые разумное приложение не должно пытаться ловить. Большинство таких ошибок ненормальные условия.ThreadDeathошибка, хотя "нормальное" условие, является также подклассError, поскольку большинство приложения не должны пытаться поймать он.Метод не требуется объявлять в его броски определяют любые подклассы
Error, которые могут быть выброшены во время выполнение метода, но не поймали, поскольку эти ошибки ненормальные условия, которые никогда не должны происходят.
Процитировано из Java документация класса Error.
Короче говоря, вы не должны ловить Error s, за исключением того, что у вас есть все основания для этого. (Например, чтобы не допустить, чтобы ваша реализация веб-сервера потерпела крах, если у сервлета закончилась нехватка памяти или что-то в этом роде.)
An Exception, с другой стороны, является просто нормальным исключением, как на любом другом современном языке. Подробное описание вы найдете в документации по API Java или в любом онлайн-ресурсе или автономном ресурсе.
Ответ 6
Существует несколько сходств и различий между классами java.lang.Exception и java.lang.Error.
Сходства:
-
Сначала - оба класса расширяются
java.lang.Throwableи, как результат наследует многие из методов, которые обычно используются при работе с ошибками, такими как:getMessage,getStackTrace,printStackTraceи и так далее. -
Во-вторых, как подклассы
java.lang.Throwableони оба наследуют следующие свойства:-
Подбрасываемый сам и любой из его подклассов (включая
java.lang.Error) можно объявить в списке исключений методов с помощью ключевого словаthrows. Такое объявление требуется только дляjava.lang.Exceptionи подклассов дляjava.lang.Throwable,java.lang.Errorиjava.lang.RuntimeException, а их подклассы необязательны. -
Только
java.lang.Throwableи подклассы разрешены для использования в предложенииcatch. -
Только
java.lang.Throwableи подклассы могут использоваться с ключевым словом -throw.
-
Вывод из этого свойства заключается в том, что как java.lang.Error, так и java.lang.Exception могут быть объявлены в заголовке метода, могут быть в выражении catch, могут использоваться с ключевым словом throw.
Отличия:
-
Во-первых - концептуальная разница:
java.lang.Error, предназначенная для брошенных JVM и указывающих на серьезные проблемы и предназначенные для остановки выполнение программы вместо того, чтобы быть пойманным (но это возможно как для любой другой преемникjava.lang.Throwable).Отрывок из описание javadoc о
java.lang.Error:... указывает на серьезные проблемы, которые разумное применение должно не пытайтесь поймать.
В противоположном
java.lang.Exception, предназначенном для представления ошибок, которые ожидаемый и может обрабатываться программистом без прерывания выполнение программы.Отрывок из описание javadoc о
java.lang.Exception:... указывает условия, которые разумное приложение может пожелать улов.
- Второе различие между
java.lang.Errorиjava.lang.Exception, которое сначала считалось исключением unchecked для проверки исключения времени компиляции. Поскольку в результате преобразования кодаjava.lang.Errorили его подклассов не требуется объявлять эту ошибку в заголовке метода. При метанииjava.lang.Exceptionтребуемой декларации в заголовке метода.
Throwable и его диаграмма класса преемников (свойства и методы опущены).

Ответ 7
Здесь довольно хорошее резюме из Java API, что представляет собой Ошибка и Исключение:
Ошибка - это подкласс Throwable, который указывает на серьезные проблемы, которые разумное приложение не должно пытаться поймать. Большинство таких ошибок являются ненормальными условиями. Ошибка ThreadDeath, хотя и является "нормальным" условием, также является подклассом Error, поскольку большинство приложений не должны пытаться ее поймать.
Метод не требуется объявлять в его броски определяют любые подклассы Ошибка, которая может быть выполнение метода, но не поймали, поскольку эти ошибки ненормальные условия, которые никогда не должны происходят.
OTOH, для исключений API Java говорит:
Класс Exception и его подклассы являются формой Throwable, которая указывает условия, которые разумное приложение может захотеть поймать.
Ответ 8
IMO ошибка - это то, что может привести к сбою вашего приложения и не должно быть обработано. Исключением является то, что может вызвать непредсказуемые результаты, но может быть восстановлено.
Пример:
Если у программы закончилась нехватка памяти, это ошибка, так как приложение не может продолжаться. Однако, если программа принимает неправильный тип ввода, это исключение, так как программа может обрабатывать его и перенаправлять на получение правильного типа ввода.
Ответ 9
Ошибки в основном вызваны средой, в которой работает приложение. Например, OutOfMemoryError возникает, когда у JVM заканчивается память или StackOverflowError возникает, когда переполнение стека.
Исключения в основном вызваны самим приложением. Например, NullPointerException возникает, когда приложение пытается получить доступ к нулевому объекту или ClassCastException возникает, когда приложение пытается использовать несовместимые типы классов.
Ответ 10
Ошибки -
-
Errorв java имеют типjava.lang.Error. - Все ошибки в java неконтролируемы.
-
Errorпроисходят во время выполнения. Они не будут известны компилятору. - Исправить ошибки невозможно.
-
Errorв основном вызваны средой, в которой работает приложение. - Примеры:
java.lang.StackOverflowError,java.lang.OutOfMemoryError
-
Exceptionв java имеют типjava.lang.Exception. -
Exceptionвключают как проверенные, так и непроверенные типы. - Проверенные исключения известны компилятору, где, поскольку неконтролируемые исключения не известны компилятору, поскольку они возникают во время выполнения.
- Вы можете восстановить из-за исключения, обработав их через
try-catch. -
Exceptionв основном вызваны самим приложением. - Примеры: Проверенные исключения:
SQLException,IOException
Непроверенные исключения:ArrayIndexOutOfBoundException,ClassCastException,NullPointerException
следующее чтение: http://javaconceptoftheday.com/difference-between-error-vs-exception-in-java/

