Я пытаюсь узнать больше об основной Java и различных типах Throwable, может кто-нибудь сообщить мне разницу между исключениями и ошибками?
173
Ошибки не должны быть пойманы или обработаны (за исключением редких случаев). Исключения - это хлеб с маслом обработки исключений. Javadoc объясняет это хорошо:
Ошибка - это подкласс Throwable, который указывает на серьезные проблемы, которые разумное приложение не должно пытаться обнаружить. Большинство таких ошибок являются ненормальными условиями.
Посмотрите на некоторые из подклассов Error
, взяв некоторые из их комментариев JavaDoc:
AnnotationFormatError
- Выдается, когда анализатор аннотаций пытается прочитать аннотацию из файла класса и определяет, что аннотация искажена.AssertionError
- Брошенный, чтобы указать, что утверждение не удалось.LinkageError
- Подклассы LinkageError указывают, что класс имеет некоторую зависимость от другого класса; однако последний класс несовместимо изменился после компиляции первого класса.VirtualMachineError
- Брошенный, чтобы указать, что виртуальная машина Java сломана или исчерпала ресурсы, необходимые для ее продолжения работы. На самом деле есть три важные подкатегории Throwable
:
Error
- Что-то достаточно серьезное пошло не так, что большинство приложений должно зависать, а не пытаться решить проблему,RuntimeException
) - очень часто ошибка программирования, такая как NullPointerException
или недопустимый аргумент. Иногда приложения могут обрабатывать или восстанавливать данные из этой Throwable
категории - или, по крайней мере, отлавливать их в run()
методе Thread , регистрировать жалобу и продолжать работу.FileNotFoundException
и TimeoutException
...
Unchecked exceptions != RuntimeExceptions
;Unchecked exceptions = RuntimeExceptions + Errors
, Я знаю, что возникает вопрос: является ли ошибка исключением? , но это то, что они пишут. Вот только один из этих примеров: docs.oracle.com/javase/tutorial/essential/exceptions/… .Этот слайд показывает иерархию исключений в Java с помощью @ Георгиос-gousios лаконично объясняет различия между ошибками и исключениями в Java.
источник
Ошибки имеют тенденцию сигнализировать об окончании вашего приложения, как вы его знаете. Как правило, он не может быть восстановлен и должен привести к выходу вашей виртуальной машины. Поймать их не следует, за исключением возможности регистрации или отображения соответствующего сообщения перед выходом.
Пример: OutOfMemoryError - Вы мало что можете сделать, так как ваша программа больше не может работать.
Исключения часто восстанавливаемы, и даже если нет, они обычно означают, что попытка операции не удалась, но ваша программа все еще может продолжаться.
Пример: IllegalArgumentException - передал недопустимые данные в метод, так что вызов метода не удался, но это не влияет на будущие операции.
Это упрощенные примеры, и есть только много информации только об исключениях.
источник
Ошибки -
Error
s в Java имеют типjava.lang.Error
.Error
происходит во время выполнения. Они не будут известны компилятору.Error
В основном это вызвано средой, в которой работает приложение.java.lang.StackOverflowError
,java.lang.OutOfMemoryError
Исключения -
Exception
s в Java имеют типjava.lang.Exception
.Exception
s включает как проверенный, так и непроверенный тип.try-catch
блоки.Exception
s в основном вызваны самим приложением.SQLException
,IOException
Unchecked Исключение:
ArrayIndexOutOfBoundException
,ClassCastException
,NullPointerException
дальнейшее чтение: http://javaconceptoftheday.com/difference-between-error-vs-exception-in-java/
источник
Солнце ставит это лучше всего :
источник
Описание
Error
класса довольно понятно:Цитируется из собственной документации
Error
Java этого класса .Короче говоря, вы не должны ловить
Error
s, кроме случаев, когда у вас есть на то веские причины. (Например, чтобы предотвратить сбой реализации веб-сервера, если сервлету не хватает памяти или что-то в этом роде.)С
Exception
другой стороны, это обычное исключение, как и в любом другом современном языке. Подробное описание вы найдете в документации по API Java или на любом онлайн или автономном ресурсе.источник
Существует несколько сходств и различий между классами
java.lang.Exception
иjava.lang.Error
.сходства:
Во- первых - оба класса распространяется
java.lang.Throwable
и в результате наследует многие из методов , которые являются общими для использования при работе с ошибками , такими как:getMessage
,getStackTrace
,printStackTrace
и так далее.Во-вторых, будучи подклассами,
java.lang.Throwable
они оба наследуют следующие свойства:Сам 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
первым считается непроверенным исключением для проверки исключений во время компиляции. В результате в результате выдачи кодаjava.lang.Error
или его подклассов не требуется объявлять эту ошибку в заголовке метода. При этом выдаетсяjava.lang.Exception
обязательное объявление в заголовке метода.Throwable и его диаграмма классов-наследников (свойства и методы опущены).
источник
ИМО ошибка - это то, что может привести к сбою приложения и не должно обрабатываться. Исключением является то, что может привести к непредсказуемым результатам, но может быть восстановлено.
Пример:
Если программе не хватает памяти, это ошибка, так как приложение не может продолжить работу. Однако, если программа принимает неправильный тип ввода, это исключение, поскольку программа может обработать его и перенаправить для получения правильного типа ввода.
источник
Ошибки в основном вызваны средой, в которой работает приложение. Например, OutOfMemoryError возникает, когда JVM не хватает памяти, или StackOverflowError возникает, когда стек переполняется.
Исключения в основном вызваны самим приложением. Например, NullPointerException возникает, когда приложение пытается получить доступ к нулевому объекту, или ClassCastException возникает, когда приложение пытается привести несовместимые типы классов.
Источник: Разница между ошибкой и исключением в Java
источник
Вот довольно хорошее резюме из Java API, что представляет собой Ошибка и Исключение:
OTOH, для исключений, Java API говорит:
источник
Ошибки вызваны средой, в которой работает ваше приложение или программа. В большинстве случаев вы не можете восстановиться после этого, поскольку это завершает ваше приложение или программу. Javadoc посоветовал вам не беспокоиться об обнаружении таких ошибок, так как среда, например JVM, при таких ошибках все равно будет выходить.
Примеры:
VirtualMachineError
- Брошенный, чтобы указать, что виртуальная машина Java сломана или исчерпала ресурсы, необходимые для ее продолжения работы.OutOfMemoryError
происходит, когда JVM исчерпывает память илиStackOverflowError
происходит, когда стек переполняется.Исключения вызваны вашим приложением или самой программой; возможно из-за вашей собственной ошибки. В большинстве случаев вы можете восстановить его, и ваше приложение все равно будет продолжать работать. Рекомендуется отлавливать такие ошибки, чтобы предотвратить ненормальное завершение работы вашего приложения или программы и / или иметь возможность настроить сообщение об исключении, чтобы пользователи увидели красиво отформатированное сообщение вместо стандартных некрасивых сообщений об исключениях, разбросанных повсеместно.
Примеры:
NullPointerException
происходит, когда приложение пытается получить доступ к нулевому объекту. или Попытка получить доступ к массиву с несуществующим индексом или вызвать функцию с неправильными данными или параметрами.источник