Я пытаюсь узнать больше об основной Java и различных типах Throwable, может кто-нибудь сообщить мне разницу между исключениями и ошибками?
Я пытаюсь узнать больше об основной Java и различных типах Throwable, может кто-нибудь сообщить мне разницу между исключениями и ошибками?
Ответы:
Ошибки не должны быть пойманы или обработаны (за исключением редких случаев). Исключения - это хлеб с маслом обработки исключений. Javadoc объясняет это хорошо:
Ошибка - это подкласс Throwable, который указывает на серьезные проблемы, которые разумное приложение не должно пытаться обнаружить. Большинство таких ошибок являются ненормальными условиями.
Посмотрите на некоторые из подклассов Error, взяв некоторые из их комментариев JavaDoc:
AnnotationFormatError - Выдается, когда анализатор аннотаций пытается прочитать аннотацию из файла класса и определяет, что аннотация искажена.AssertionError - Брошенный, чтобы указать, что утверждение не удалось.LinkageError- Подклассы LinkageError указывают, что класс имеет некоторую зависимость от другого класса; однако последний класс несовместимо изменился после компиляции первого класса.VirtualMachineError - Брошенный, чтобы указать, что виртуальная машина Java сломана или исчерпала ресурсы, необходимые для ее продолжения работы. На самом деле есть три важные подкатегории Throwable:
Error - Что-то достаточно серьезное пошло не так, что большинство приложений должно зависать, а не пытаться решить проблему,RuntimeException) - очень часто ошибка программирования, такая как NullPointerExceptionили недопустимый аргумент. Иногда приложения могут обрабатывать или восстанавливать данные из этой Throwableкатегории - или, по крайней мере, отлавливать их в run()методе Thread , регистрировать жалобу и продолжать работу.FileNotFoundExceptionи TimeoutException...Этот слайд показывает иерархию исключений в Java с помощью @ Георгиос-gousios лаконично объясняет различия между ошибками и исключениями в Java.
Ошибки имеют тенденцию сигнализировать об окончании вашего приложения, как вы его знаете. Как правило, он не может быть восстановлен и должен привести к выходу вашей виртуальной машины. Поймать их не следует, за исключением возможности регистрации или отображения соответствующего сообщения перед выходом.
Пример: OutOfMemoryError - Вы мало что можете сделать, так как ваша программа больше не может работать.
Исключения часто восстанавливаемы, и даже если нет, они обычно означают, что попытка операции не удалась, но ваша программа все еще может продолжаться.
Пример: IllegalArgumentException - передал недопустимые данные в метод, так что вызов метода не удался, но это не влияет на будущие операции.
Это упрощенные примеры, и есть только много информации только об исключениях.
Ошибки -
Errors в Java имеют тип java.lang.Error .Errorпроисходит во время выполнения. Они не будут известны компилятору. ErrorВ основном это вызвано средой, в которой работает приложение. java.lang.StackOverflowError ,java.lang.OutOfMemoryErrorExceptions в Java имеют тип java.lang.Exception.Exceptions включает как проверенный, так и непроверенный тип.try-catchблоки.Exceptions в основном вызваны самим приложением.SQLException, IOException ArrayIndexOutOfBoundException, ClassCastException,NullPointerExceptionдальнейшее чтение: http://javaconceptoftheday.com/difference-between-error-vs-exception-in-java/

Солнце ставит это лучше всего :
Ошибка - это подкласс Throwable, который указывает на серьезные проблемы, которые разумное приложение не должно пытаться обнаружить.
Описание Errorкласса довольно понятно:
An
Errorявляется подклассом,Throwableкоторый указывает на серьезные проблемы, которые разумное приложение не должно пытаться уловить. Большинство таких ошибок являются ненормальными условиями.ThreadDeathОшибка, хотя «нормальном» состоянии, также подклассError, так как большинство приложений не должны пытаться поймать его.Метод не обязан объявлять в своем предложении throws любые подклассы,
Errorкоторые могут быть выброшены во время выполнения метода, но не перехвачены, так как эти ошибки являются ненормальными условиями, которые никогда не должны возникать.
Цитируется из собственной документацииError Java этого класса .
Короче говоря, вы не должны ловить Errors, кроме случаев, когда у вас есть на то веские причины. (Например, чтобы предотвратить сбой реализации веб-сервера, если сервлету не хватает памяти или что-то в этом роде.)
С 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 API, что представляет собой Ошибка и Исключение:
Ошибка - это подкласс Throwable, который указывает на серьезные проблемы, которые разумное приложение не должно пытаться обнаружить. Большинство таких ошибок являются ненормальными условиями. Ошибка ThreadDeath, хотя и является «нормальным» условием, также является подклассом Error, поскольку большинство приложений не должны пытаться ее перехватить.
Метод не обязан объявлять в своем предложении throws любые подклассы Error, которые могут быть выброшены во время выполнения метода, но не перехвачены, поскольку эти ошибки являются ненормальными условиями, которые никогда не должны возникать.
OTOH, для исключений, Java API говорит:
Класс Exception и его подклассы являются формой Throwable, которая указывает условия, которые разумное приложение может захотеть перехватить.
Ошибки вызваны средой, в которой работает ваше приложение или программа. В большинстве случаев вы не можете восстановиться после этого, поскольку это завершает ваше приложение или программу. Javadoc посоветовал вам не беспокоиться об обнаружении таких ошибок, так как среда, например JVM, при таких ошибках все равно будет выходить.
Примеры:
VirtualMachineError - Брошенный, чтобы указать, что виртуальная машина Java сломана или исчерпала ресурсы, необходимые для ее продолжения работы.
OutOfMemoryErrorпроисходит, когда JVM исчерпывает память или
StackOverflowErrorпроисходит, когда стек переполняется.
Исключения вызваны вашим приложением или самой программой; возможно из-за вашей собственной ошибки. В большинстве случаев вы можете восстановить его, и ваше приложение все равно будет продолжать работать. Рекомендуется отлавливать такие ошибки, чтобы предотвратить ненормальное завершение работы вашего приложения или программы и / или иметь возможность настроить сообщение об исключении, чтобы пользователи увидели красиво отформатированное сообщение вместо стандартных некрасивых сообщений об исключениях, разбросанных повсеместно.
Примеры:
NullPointerExceptionпроисходит, когда приложение пытается получить доступ к нулевому объекту. или Попытка получить доступ к массиву с несуществующим индексом или вызвать функцию с неправильными данными или параметрами.
Unchecked exceptions != RuntimeExceptions;Unchecked exceptions = RuntimeExceptions + Errors, Я знаю, что возникает вопрос: является ли ошибка исключением? , но это то, что они пишут. Вот только один из этих примеров: docs.oracle.com/javase/tutorial/essential/exceptions/… .