Исключения в программировании (exceptions) — это механизм, который позволяет программе обрабатывать нетипичную ситуацию и при этом не прекращать работу. Благодаря этому механизму разработчик может описать в коде реакцию программы на такие ситуации.
Простой пример: в программе-калькуляторе исключением может стать ситуация, когда пользователь решит поделить на ноль. Это не должно стать ошибкой, из-за которой рушится вся программа, но чтобы ситуация не застопорила исполнение остального кода, нужно ее правильно обработать. Для этого необходимы обработчики исключений. Они позволяют «сказать» программе, что ей делать, если такое случится.
Механизм обработки исключений существует в большинстве языков программирования. Он может быть реализован немного по-разному, но общая суть схожа: это всегда какие-то особые случаи, которые надо обработать отдельно. Мы при описании будем отталкиваться от особенностей исключений в Java, но встретить их можно и в других языках: JavaScript, PHP, Python, C++ и так далее.
Механизм обработки исключений может понадобиться любому разработчику. Если не отслеживать исключительные ситуации, может возникнуть незаметная ошибка, которая нарушит работу всего кода, или программа может «зависнуть» либо «упасть» — потому что сложный момент не был обработан как надо.

Исключения нужны, чтобы программа продолжала относительно корректно работать, даже если что-то пошло не так.

Исключения делятся на две большие группы, которые пересекаются друг с другом: синхронные и асинхронные. Синхронные могут возникнуть только в конкретном месте программы или при выполнении определенной операции: открытие файла, деление и так далее. Асинхронные могут возникнуть когда и где угодно. Их «ловят» по-разному, чтобы успешно отслеживать и те, и другие.
Мы сказали, что эти группы пересекаются друг с другом, хотя по логике они противоположны. Пересечение происходит потому, что при выполнении операций асинхронным может стать даже формально синхронное исключение, и наоборот.
- Разработчик пишет код и понимает, что в какой-то момент в том или ином месте может возникнуть нештатная ситуация. Бывает, что исключения добавляют в уже написанный код — например, нештатную ситуацию обнаружили при тестировании.
- В этом месте пишется особый блок кода — обработчик. Он говорит программе: здесь может возникнуть особая ситуация, если она случится, выполни вот это.
- Внутри обработчика — функция, которая выполнится, если программа столкнется с описанной ситуацией. Она или исправит ситуацию, или скорректирует дальнейшее выполнение программы.
Бывают исключения, которые нельзя предусмотреть. Разработчики обрабатывают не все возможные нештатные ситуации, а только самые очевидные, чтобы не перегружать код. Это справедливо для большинства сфер разработки, кроме тех, где слишком высока цена ошибки.
Существуют разные виды обработки: структурная и неструктурная, с возвратом и без возврата. Они различаются механизмом действия, но общая суть одна: это функция, которая запускается, если в коде случилась та или иная исключительная ситуация. Тут можно использовать условный оператор if или специальные синтаксические конструкции.
В примере с делением на ноль обработчик может отменить попытку деления и сказать пользователю, что на ноль делить нельзя, — но это самый простой пример. В реальности все сложнее.
Обработка с возвратом и без возврата. Эти виды обработки различаются реакцией на случившееся исключение. Версия с возвратом предполагает, что обработчик попытается разрешить проблему, а когда ему это удастся, вернет программу к исходному поведению. В итоге она будет работать так, как если бы исключения не возникало.
Вот пример: не запустился скрипт, необходимый для работы следующего скрипта. Следующий скрипт заметил это, зафиксировал исключение и обратился к обработчику, который запустил нужный скрипт «вручную». После этого все может работать, как и было задумано.
Обработка без возврата — вид обработки, когда проблема не ликвидируется, а участок кода, который не получается выполнить, пропускается. В примере со скриптами обработка «переключила» бы выполнение кода на момент, где уже не понадобится незаработавший скрипт.
Структурная и неструктурная обработка. Это два способа подключить обработчики. В первом случае они встраиваются в код, а когда генерируется исключение, для него выбирается тот или иной обработчик в зависимости от ситуации. Во втором случае обработчики существуют отдельно и «подключаются» к конкретным видам исключений с помощью специальных команд. Способ выбирается в зависимости от вида исключения, особенностей кода и языка.
Обычно асинхронные исключения обрабатывают неструктурно, а синхронные — структурно.
Гарантированное завершение. Так называется отдельный вид функции, которая обычно пишется после обработчика. Она описывает действия, которые должны произойти в этой части кода вне зависимости от того, произошло исключение или нет.
Кроме исключений, в языках программирования существует механизм обработки ошибок. Их часто путают, особенно новички. И то, и другое подразумевает нетипичную ситуацию, в которой работу программы нельзя продолжить корректно. Но есть и различия:
- ошибка означает, что программа «упала», что ее работу нельзя продолжить и она должна быть завершена. Ошибку невозможно исправить — только сообщить о ней пользователю, записать в лог и прекратить исполнение кода;
- исключение — это нештатная ситуация, которую тем не менее можно попробовать починить «на ходу», не закрывая программу. В этом есть смысл, в отличие от ситуации с ошибкой.
Это действительно похожие понятия. В Java, например, сущности исключений и ошибок наследуются от общего предка — интерфейса Throwable. Но ошибка — это явление, когда что-то сделать принципиально не получается. А исключение — ситуация, когда программа просто не знает, что делать, если не указать на это дополнительно.
Можно провести аналогию. Мама послала дочь в магазин за покупками и сказала ей купить батон хлеба. Если хлеба в магазине не оказалось, девочка не сможет его купить. Это ошибка. А если в магазине есть три вида батонов, или все батоны вчерашние, а девочка не знает, нужен ли маме только свежий хлеб, или батон есть, но только из ржаной муки, — это исключения.
В первом случае дочь просто вернется домой и ничего не купит. Из-за ошибки программа не выполняется. Во втором случае девочка позвонит маме и спросит, что ей делать. Программа передаст управление обработчику, чтобы тот разрешил сложную ситуацию.
В некоторых случаях разработчики описывают все нештатные ситуации как исключения. Например, при создании новых библиотек, которые должны быть очень гибкими и подразумевать многие ситуации — то, что критично для одной задачи, окажется поправимым в другой. Но это редкие случаи, и чаще приходится выбирать между обработкой ошибки и исключения.
Обработчики ошибок советуют использовать тогда, когда проблема не решаема изнутри программы. Например, у приложения нет связи с сервером — оно не может продолжать работу без этого. Или какие-то критичные файлы оказались повреждены, и из-за этого код просто нельзя исполнить. Или в системе закончилась свободная память. Это никак не поправить программными способами.
Исключениями стоит пользоваться, если возникла нештатная, неправильная ситуация, которую не подразумевает логика работы программы. Но программу при этом не нужно выключать и завершать — надо исправить или «перескочить» проблемный момент и сохранить все остальное.
В большинстве языков механизм обработки исключений есть по умолчанию — это популярная функция. Но приступать к работе с ними рекомендуют после изучения базовых возможностей языка. Мы советуем идти от простого к сложному: начать с основ и затем переходить к комплексным темам. Конкретно обработка исключений обычно изучается перед тем, как человек переходит к практическим проектам, потому что любая более-менее сложная программа может столкнуться с исключениями в ходе работы.
I’m trying to learn more about basic Java and the different types of Throwables, can someone let me know the differences between Exceptions and Errors?
![]()
Termininja
6,44212 gold badges46 silver badges49 bronze badges
asked May 26, 2009 at 19:39
Errors should not be caught or handled (except in the rarest of cases). Exceptions are the bread and butter of exception handling. The Javadoc explains it well:
An Error is a subclass of Throwable that indicates serious problems that a
reasonable application should not try to catch. Most such errors are abnormal
conditions.
Look at a few of the subclasses of Error, taking some of their JavaDoc comments:
AnnotationFormatError— Thrown when the annotation parser attempts to read an annotation from a class file and determines that the annotation is malformed.AssertionError— Thrown to indicate that an assertion has failed.LinkageError— Subclasses of LinkageError indicate that a class has some dependency on another class; however, the latter class has incompatibly changed after the compilation of the former class.VirtualMachineError— Thrown to indicate that the Java Virtual Machine is broken or has run out of resources necessary for it to continue operating.
There are really three important subcategories of Throwable:
Error— Something severe enough has gone wrong the most applications should crash rather than try to handle the problem,- Unchecked Exception (aka
RuntimeException) — Very often a programming error such as aNullPointerExceptionor an illegal argument. Applications can sometimes handle or recover from thisThrowablecategory — or at least catch it at the Thread’srun()method, log the complaint, and continue running. - Checked Exception (aka Everything else) — Applications are expected to be able to catch and meaningfully do something with the rest, such as
FileNotFoundExceptionandTimeoutException…
answered May 26, 2009 at 19:43
EddieEddie
53.4k22 gold badges124 silver badges143 bronze badges
2
Errors tend to signal the end of your application as you know it. It typically cannot be recovered from and should cause your VM to exit. Catching them should not be done except to possibly log or display and appropriate message before exiting.
Example:
OutOfMemoryError — Not much you can do as your program can no longer run.
Exceptions are often recoverable and even when not, they generally just mean an attempted operation failed, but your program can still carry on.
Example:
IllegalArgumentException — Passed invalid data to a method so that method call failed, but it does not affect future operations.
These are simplistic examples, and there is another wealth of information on just Exceptions alone.
answered May 26, 2009 at 19:47
RobinRobin
23.9k4 gold badges49 silver badges58 bronze badges
1
Errors —
Errors in java are of typejava.lang.Error.- All errors in java are unchecked type.
Errors happen at run time. They will not be known to compiler.- It is impossible to recover from errors.
Errors are mostly caused by the environment in which application is running.- Examples :
java.lang.StackOverflowError,java.lang.OutOfMemoryError
Exceptions —
Exceptions in java are of typejava.lang.Exception.Exceptions include both checked as well as unchecked type.- Checked exceptions are known to compiler where as unchecked exceptions are not known to compiler because they occur at run time.
- You can recover from exceptions by handling them through
try-catchblocks. Exceptions are mainly caused by the application itself.- Examples : Checked Exceptions :
SQLException,IOException
Unchecked Exceptions :ArrayIndexOutOfBoundException,ClassCastException,NullPointerException
further reading : http://javaconceptoftheday.com/difference-between-error-vs-exception-in-java/

answered Sep 15, 2017 at 6:19
![]()
roottravellerroottraveller
7,7047 gold badges58 silver badges65 bronze badges
Sun puts it best:
An Error is a subclass of Throwable
that indicates serious problems that a
reasonable application should not try
to catch.
answered May 26, 2009 at 19:48
PowerlordPowerlord
86.5k17 gold badges125 silver badges172 bronze badges
The description of the Error class is quite clear:
An
Erroris a subclass ofThrowable
that indicates serious problems that a
reasonable application should not try
to catch. Most such errors are
abnormal conditions. TheThreadDeath
error, though a «normal» condition, is
also a subclass ofErrorbecause most
applications should not try to catch
it.A method is not required to declare in
its throws clause any subclasses of
Errorthat might be thrown during the
execution of the method but not
caught, since these errors are
abnormal conditions that should never
occur.
Cited from Java’s own documentation of the class Error.
In short, you should not catch Errors, except you have a good reason to do so. (For example to prevent your implementation of web server to crash if a servlet runs out of memory or something like that.)
An Exception, on the other hand, is just a normal exception as in any other modern language. You will find a detailed description in the Java API documentation or any online or offline resource.
answered May 26, 2009 at 19:50
There is several similarities and differences between classes java.lang.Exception and java.lang.Error.
Similarities:
-
First — both classes extends
java.lang.Throwableand as a result
inherits many of the methods which are common to be used when dealing
with errors such as:getMessage,getStackTrace,printStackTraceand
so on. -
Second, as being subclasses of
java.lang.Throwablethey both inherit
following properties:-
Throwable itself and any of its subclasses (including
java.lang.Error) can be declared in method exceptions list usingthrowskeyword. Such declaration required only forjava.lang.Exceptionand subclasses, forjava.lang.Throwable,java.lang.Errorandjava.lang.RuntimeExceptionand their subclasses it is optional. -
Only
java.lang.Throwableand subclasses allowed to be used in thecatchclause. -
Only
java.lang.Throwableand subclasses can be used with keyword —throw.
-
The conclusion from this property is following both java.lang.Error and java.lang.Exception can be declared in the method header, can be in catch clause, can be used with keyword throw.
Differences:
-
First — conceptual difference:
java.lang.Errordesigned to be
thrown by the JVM and indicate serious problems and intended to stop
program execution instead of being caught(but it is possible as for
any otherjava.lang.Throwablesuccessor).A passage from javadoc description about
java.lang.Error:…indicates serious problems that a reasonable application should
not try to catch.In opposite
java.lang.Exceptiondesigned to represent errors that
expected and can be handled by a programmer without terminating
program execution.A passage from javadoc description about
java.lang.Exception:…indicates conditions that a reasonable application might want to
catch. - The second difference between
java.lang.Errorandjava.lang.Exceptionthat first considered to be a unchecked exception for compile-time exception checking. As the result code throwingjava.lang.Erroror its subclasses don’t require to declare this error in the method header. While throwingjava.lang.Exceptionrequired declaration in the method header.
Throwable and its successor class diagram (properties and methods are omitted).

answered May 4, 2016 at 14:59
IMO an error is something that can cause your application to fail and should not be handled. An exception is something that can cause unpredictable results, but can be recovered from.
Example:
If a program has run out of memory it is an error as the application cannot continue. However, if a program accepts an incorrect input type it is an exception as the program can handle it and redirect to receive the correct input type.
answered May 26, 2009 at 19:50
Mr. WillMr. Will
2,3083 gold badges21 silver badges27 bronze badges
Errors are mainly caused by the environment in which application is running. For example, OutOfMemoryError occurs when JVM runs out of memory or StackOverflowError occurs when stack overflows.
Exceptions are mainly caused by the application itself. For example, NullPointerException occurs when an application tries to access null object or ClassCastException occurs when an application tries to cast incompatible class types.
Source : Difference Between Error Vs Exception In Java
answered Apr 27, 2015 at 14:10
user2485429user2485429
5778 silver badges7 bronze badges
1
Here’s a pretty good summary from Java API what an Error and Exception represents:
An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions. The ThreadDeath error, though a «normal» condition, is also a subclass of Error because most applications should not try to catch it.
A method is not required to declare in
its throws clause any subclasses of
Error that might be thrown during the
execution of the method but not
caught, since these errors are
abnormal conditions that should never
occur.
OTOH, for Exceptions, Java API says:
The class Exception and its subclasses are a form of Throwable that indicates conditions that a reasonable application might want to catch.
answered May 26, 2009 at 19:50
egagaegaga
20.7k10 gold badges45 silver badges60 bronze badges
Errors are caused by the environment where your application or program runs. Most times, you may not recover from it as this ends your application or program. Javadoc advised that you shouldn’t bother catching such errors since the environment e.g. JVM, on such errors is going to quit anyway.
Examples:
VirtualMachineError — Thrown to indicate that the Java Virtual Machine is broken or has run out of resources necessary for it to continue operating.
OutOfMemoryError occurs when JVM runs out of memory or
StackOverflowError occurs when stack runs over.
Exceptions are caused by your application or program itself; maybe due to your own mistake. Most times you can recover from it and your application would still continue to run. You are advised to catch such errors to prevent abnormal termination of your application or program and/or to be able to customize the exception message so the users see a nicely formatted message instead of the default ugly exception messages scattered all over the place.
Examples:
NullPointerException occurs when an application tries to access null object. or
Trying to access an array with a non-existing index or calling a function with wrong data or parameters.
answered May 19, 2020 at 10:12
pasignaturepasignature
5651 gold badge6 silver badges13 bronze badges
I’m trying to learn more about basic Java and the different types of Throwables, can someone let me know the differences between Exceptions and Errors?
![]()
Termininja
6,44212 gold badges46 silver badges49 bronze badges
asked May 26, 2009 at 19:39
Errors should not be caught or handled (except in the rarest of cases). Exceptions are the bread and butter of exception handling. The Javadoc explains it well:
An Error is a subclass of Throwable that indicates serious problems that a
reasonable application should not try to catch. Most such errors are abnormal
conditions.
Look at a few of the subclasses of Error, taking some of their JavaDoc comments:
AnnotationFormatError— Thrown when the annotation parser attempts to read an annotation from a class file and determines that the annotation is malformed.AssertionError— Thrown to indicate that an assertion has failed.LinkageError— Subclasses of LinkageError indicate that a class has some dependency on another class; however, the latter class has incompatibly changed after the compilation of the former class.VirtualMachineError— Thrown to indicate that the Java Virtual Machine is broken or has run out of resources necessary for it to continue operating.
There are really three important subcategories of Throwable:
Error— Something severe enough has gone wrong the most applications should crash rather than try to handle the problem,- Unchecked Exception (aka
RuntimeException) — Very often a programming error such as aNullPointerExceptionor an illegal argument. Applications can sometimes handle or recover from thisThrowablecategory — or at least catch it at the Thread’srun()method, log the complaint, and continue running. - Checked Exception (aka Everything else) — Applications are expected to be able to catch and meaningfully do something with the rest, such as
FileNotFoundExceptionandTimeoutException…
answered May 26, 2009 at 19:43
EddieEddie
53.4k22 gold badges124 silver badges143 bronze badges
2
Errors tend to signal the end of your application as you know it. It typically cannot be recovered from and should cause your VM to exit. Catching them should not be done except to possibly log or display and appropriate message before exiting.
Example:
OutOfMemoryError — Not much you can do as your program can no longer run.
Exceptions are often recoverable and even when not, they generally just mean an attempted operation failed, but your program can still carry on.
Example:
IllegalArgumentException — Passed invalid data to a method so that method call failed, but it does not affect future operations.
These are simplistic examples, and there is another wealth of information on just Exceptions alone.
answered May 26, 2009 at 19:47
RobinRobin
23.9k4 gold badges49 silver badges58 bronze badges
1
Errors —
Errors in java are of typejava.lang.Error.- All errors in java are unchecked type.
Errors happen at run time. They will not be known to compiler.- It is impossible to recover from errors.
Errors are mostly caused by the environment in which application is running.- Examples :
java.lang.StackOverflowError,java.lang.OutOfMemoryError
Exceptions —
Exceptions in java are of typejava.lang.Exception.Exceptions include both checked as well as unchecked type.- Checked exceptions are known to compiler where as unchecked exceptions are not known to compiler because they occur at run time.
- You can recover from exceptions by handling them through
try-catchblocks. Exceptions are mainly caused by the application itself.- Examples : Checked Exceptions :
SQLException,IOException
Unchecked Exceptions :ArrayIndexOutOfBoundException,ClassCastException,NullPointerException
further reading : http://javaconceptoftheday.com/difference-between-error-vs-exception-in-java/

answered Sep 15, 2017 at 6:19
![]()
roottravellerroottraveller
7,7047 gold badges58 silver badges65 bronze badges
Sun puts it best:
An Error is a subclass of Throwable
that indicates serious problems that a
reasonable application should not try
to catch.
answered May 26, 2009 at 19:48
PowerlordPowerlord
86.5k17 gold badges125 silver badges172 bronze badges
The description of the Error class is quite clear:
An
Erroris a subclass ofThrowable
that indicates serious problems that a
reasonable application should not try
to catch. Most such errors are
abnormal conditions. TheThreadDeath
error, though a «normal» condition, is
also a subclass ofErrorbecause most
applications should not try to catch
it.A method is not required to declare in
its throws clause any subclasses of
Errorthat might be thrown during the
execution of the method but not
caught, since these errors are
abnormal conditions that should never
occur.
Cited from Java’s own documentation of the class Error.
In short, you should not catch Errors, except you have a good reason to do so. (For example to prevent your implementation of web server to crash if a servlet runs out of memory or something like that.)
An Exception, on the other hand, is just a normal exception as in any other modern language. You will find a detailed description in the Java API documentation or any online or offline resource.
answered May 26, 2009 at 19:50
There is several similarities and differences between classes java.lang.Exception and java.lang.Error.
Similarities:
-
First — both classes extends
java.lang.Throwableand as a result
inherits many of the methods which are common to be used when dealing
with errors such as:getMessage,getStackTrace,printStackTraceand
so on. -
Second, as being subclasses of
java.lang.Throwablethey both inherit
following properties:-
Throwable itself and any of its subclasses (including
java.lang.Error) can be declared in method exceptions list usingthrowskeyword. Such declaration required only forjava.lang.Exceptionand subclasses, forjava.lang.Throwable,java.lang.Errorandjava.lang.RuntimeExceptionand their subclasses it is optional. -
Only
java.lang.Throwableand subclasses allowed to be used in thecatchclause. -
Only
java.lang.Throwableand subclasses can be used with keyword —throw.
-
The conclusion from this property is following both java.lang.Error and java.lang.Exception can be declared in the method header, can be in catch clause, can be used with keyword throw.
Differences:
-
First — conceptual difference:
java.lang.Errordesigned to be
thrown by the JVM and indicate serious problems and intended to stop
program execution instead of being caught(but it is possible as for
any otherjava.lang.Throwablesuccessor).A passage from javadoc description about
java.lang.Error:…indicates serious problems that a reasonable application should
not try to catch.In opposite
java.lang.Exceptiondesigned to represent errors that
expected and can be handled by a programmer without terminating
program execution.A passage from javadoc description about
java.lang.Exception:…indicates conditions that a reasonable application might want to
catch. - The second difference between
java.lang.Errorandjava.lang.Exceptionthat first considered to be a unchecked exception for compile-time exception checking. As the result code throwingjava.lang.Erroror its subclasses don’t require to declare this error in the method header. While throwingjava.lang.Exceptionrequired declaration in the method header.
Throwable and its successor class diagram (properties and methods are omitted).

answered May 4, 2016 at 14:59
IMO an error is something that can cause your application to fail and should not be handled. An exception is something that can cause unpredictable results, but can be recovered from.
Example:
If a program has run out of memory it is an error as the application cannot continue. However, if a program accepts an incorrect input type it is an exception as the program can handle it and redirect to receive the correct input type.
answered May 26, 2009 at 19:50
Mr. WillMr. Will
2,3083 gold badges21 silver badges27 bronze badges
Errors are mainly caused by the environment in which application is running. For example, OutOfMemoryError occurs when JVM runs out of memory or StackOverflowError occurs when stack overflows.
Exceptions are mainly caused by the application itself. For example, NullPointerException occurs when an application tries to access null object or ClassCastException occurs when an application tries to cast incompatible class types.
Source : Difference Between Error Vs Exception In Java
answered Apr 27, 2015 at 14:10
user2485429user2485429
5778 silver badges7 bronze badges
1
Here’s a pretty good summary from Java API what an Error and Exception represents:
An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions. The ThreadDeath error, though a «normal» condition, is also a subclass of Error because most applications should not try to catch it.
A method is not required to declare in
its throws clause any subclasses of
Error that might be thrown during the
execution of the method but not
caught, since these errors are
abnormal conditions that should never
occur.
OTOH, for Exceptions, Java API says:
The class Exception and its subclasses are a form of Throwable that indicates conditions that a reasonable application might want to catch.
answered May 26, 2009 at 19:50
egagaegaga
20.7k10 gold badges45 silver badges60 bronze badges
Errors are caused by the environment where your application or program runs. Most times, you may not recover from it as this ends your application or program. Javadoc advised that you shouldn’t bother catching such errors since the environment e.g. JVM, on such errors is going to quit anyway.
Examples:
VirtualMachineError — Thrown to indicate that the Java Virtual Machine is broken or has run out of resources necessary for it to continue operating.
OutOfMemoryError occurs when JVM runs out of memory or
StackOverflowError occurs when stack runs over.
Exceptions are caused by your application or program itself; maybe due to your own mistake. Most times you can recover from it and your application would still continue to run. You are advised to catch such errors to prevent abnormal termination of your application or program and/or to be able to customize the exception message so the users see a nicely formatted message instead of the default ugly exception messages scattered all over the place.
Examples:
NullPointerException occurs when an application tries to access null object. or
Trying to access an array with a non-existing index or calling a function with wrong data or parameters.
answered May 19, 2020 at 10:12
pasignaturepasignature
5651 gold badge6 silver badges13 bronze badges
В продолжение первой части серии рассмотрим тему про Exception.
Exception:
-
Что такое исключение (Exception)
-
Какая иерархия исключений в Java
-
Какая разница между Error, Exception и RuntimeException
-
Как обработать исключения в Java
Рекомендуем публикацию по теме
Что такое исключение (Exception)
Исключением является событие ошибки, которое может произойти во время выполнения программы и нарушить ее нормальный поток выполнения. Исключение может быть вызвано различными ситуациями, такими как: неправильные данные, введенные пользователем, сбой оборудования, нехватка ресурсов, сбой сетевого подключения и т. д.
В Java исключения являются объектами и наследуются от класса Object.
Какая иерархия исключений в Java
Все исключения в Java наследуются от класса Throwable. Класс Throwable имеет два наследника — Error и Exception. Также есть RuntimeException, который наследуется от Exception. Когда идет речь об ошибках в Java, обычно имеют ввиду эти три класса: Error, Exception и RuntimeException. Все другие ошибки наследуются от этих классов.
Все исключения делятся на два типа: проверяемые исключения (checked) и непроверяемые исключения (unchecked).
Проверяемые исключения (checked) представляют собой ошибки, которые нужно обрабатывать в программе разработчику вручную. К этому типу относятся все потомки класса Exception (но не RuntimeException), а также класс Throwable.
Проверяемые исключения проверяются во время компиляции. Это означает, что на этапе компиляции компилятор проверяет, все ли проверяемые исключения были обработаны, если нет, то выдается ошибка компиляции.
Непроверяемые исключения (unchecked) представляют собой ошибки, которые не нужно обрабатывать вручную. К ним относятся классы Error и RuntimeException (наследник класса Exception) и их наследники. Это означает, что если программа генерирует непроверяемое исключение, и даже если вы не обрабатывали или не объявляли это исключение, программа не выдаст ошибку компиляции.
Рекомендуем курс по теме
Какая разница между Error, Exception и RuntimeException
Error представляет исключения, которые, согласно спецификации Java, не следует пытаться обрабатывать в собственной программе, поскольку они связаны с проблемами JVM.
Например, исключения такого рода возникают, если закончилась память, доступная виртуальной машине, и ловить такую ошибку не имеет смысла, так как JVM не сможет обеспечить дополнительную память. Наследуется от Throwable.
Далее перечислим несколько часто встречающихся наследников класса Error:
OutOfMemoryError — исключение возникает, когда не хватает памяти для создания новых объектов.
StackOverflowError — исключение возникает, когда происходит переполнение стека из-за глубокой рекурсии или отсутствии выхода из рекурсии.
NoClassDefFoundError — исключение возникает, когда приложение пытается загрузить класс. Например, создание нового объекта с использованием выражения «new».
Exception наследуется от Throwable. Exception и все его подклассы являются проверяемыми исключениями (checked), кроме RuntimeException.
Далее перечислим несколько часто встречающихся проверяемых (checked) исключений, которые наследуются от Exception:
IOException — базовый класс исключений для ошибок, связанных с операциями ввода-вывода.
Наследники: FileNotFoundException, UnsupportedEncodingException, EOFException, SocketException и т.д.
SQLException — базовый класс исключений, возникающих при работе с БД.
Наследники: SQLSyntaxErrorException, SQLFeatureNotSupportedException, SQLTimeoutException и т.д.
ClassNotFoundException — исключение возникает, когда приложение загружает класс через строковое имя (Class.forName, ClassLoader.findSystemClass, ClassLoader.loadClass)
RuntimeException наследуется от Exception. RuntimeException и все его подклассы являются непроверяемыми исключениями (unchecked).
Далее перечислим несколько часто встречающихся непроверяемых (unchecked) исключений, которые наследуются от RuntimeException:
NullPointerException — исключение, которое возникает при попытке использовать ссылку, которая не указывает ни на одно место в памяти (null). Вызов метода по ссылке null или попытка получить доступ к полю ссылки null вызовут NullPointerException. Один из самых часто встречающихся типов ошибок. Означает чаще всего ошибку разработчика.
ArithmeticException — исключение, которое возникает при ошибочных арифметических операциях. Например, деление на ноль или переполнение int, long и т.д.
ArrayIndexOutOfBoundsException — исключение, которое возникает при попытке доступа по недопустимому индексу в массиве. Индекс либо отрицательный, либо больше или равен размеру массива.
StringIndexOutOfBoundsException — исключение, которое возникает при попытке доступа по недопустимому индексу в строке. Индекс либо отрицательный, либо больше или равен размеру массива.
ClassCastException — исключение, которое возникает при попытке приведения одного типа объекта к подклассу другого типа объекта, экземпляром которого он не является.
Как обработать исключения в Java
В Java есть пять ключевых слов для работы с исключениями: try, catch, finally, throw, throws.
Для обработки исключений используют конструкцию вида try…catch…finally и c Java 1.7 можно использовать конструкцию try-with-resources.
Первый способ:
try {
//код, який може привести до помилки
}
catch (Exception e ){
//код, який обробляє виключення
} finally {
//запускається в будь-якому випадку (блок finally не обов'язковий)
}
Первый способ не подходит для работы с ресурсами.
Второй способ:
try (OutputStream stream = openOutputStream()) {
// щось робимо зі stream
}
try-with-resource можно использовать только над классами, которые наследуются от интерфейса Autoclosable. Это синтаксический сахар, компилятор во время компиляции превращает try-with-resource в обычный try-catch-finally и в блоке finally вызывает метод close у объекта, который указан в скобках после слова try.
В следующей части поговорим о Java Collections. Спасибо большое всем, кто дочитал )

Содержание
- Что такое ошибка в C #
- Что такое исключение в C #
- Разница между ошибкой и исключением в C #
главное отличие между ошибкой и исключением в C # заключается в том, что Ошибка возникает из-за недоступности системного ресурса, а исключение возникает из-за проблемы в программе.
Существует четкая разница между ошибкой и исключением в C #, хотя люди часто используют эти два термина взаимозаменяемо. Ошибка — это ситуация, которая возникает из-за отсутствия необходимого системного ресурса. Исключением является ситуация, возникающая из-за проблемы в программе. В целом, ошибка необратима, а исключение исправимо.
Ключевые области покрыты
1. Что такое ошибка в C #
— определение, функциональность
2. Что такое исключение в C #
— определение, функциональность
3. В чем разница между ошибкой и исключением в C #
— Сравнение основных различий
Основные условия
Ошибка, исключение, C #

Ошибка — это ситуация, которая возникает из-за недоступности системных ресурсов. Ошибки — это сложные ошибки, и программист не может обработать их в своей программе. Следовательно, ошибка необратима. Это непроверенный тип, потому что компилятор не знает о его появлении. Таким образом ошибка возникает во время выполнения. Ошибка нехватки памяти, ошибка переполнения стека, ошибки системного сбоя — некоторые распространенные ошибки. Поскольку программист не может обработать эти ошибки с помощью своей программы на C #, они приводят к аварийному завершению программы.
Что такое исключение в C #
Исключением является проблема, возникающая при выполнении программы. Исключение может возникнуть из-за проблемы в программе на C #, но их можно восстановить. Разделение числа на ноль является примером исключения. Программист обрабатывает исключения в программе на C #, используя блоки try, catch и finally. Он может поместить код, который может вызвать исключение, в блок try. Если возникает исключение, программа выполняет операторы внутри блока catch. Блок finally будет выполняться независимо от того, произошло исключение или нет. Программист может включать в себя такие операции, как закрытие файла внутри блока finally. Более того, не обязательно иметь блок finally.
Существует два типа исключений как исключений с проверкой и без проверки. Компилятор знает о проверенных исключениях. С другой стороны, компилятор не знает о непроверенных исключениях.

Рисунок 1: C # программа с исключением
Выше программа с исключением. Переменная «a» имеет значение 10, а «b» — значение 0. Деление a на b дает исключение. Следовательно, блок catch выполняет и печатает исключение. В конце выполняется блок finally.
Разница между ошибкой и исключением в C #
Определение
Ошибка является признаком неожиданного состояния, которое возникает из-за нехватки системных ресурсов, в то время как исключение является проблемой в программе, которая препятствует нормальному выполнению программы. Таким образом, это основное отличие между ошибкой и исключением в C #.
Вхождение
Кроме того, ошибка возникает из-за нехватки системных ресурсов, тогда как исключение возникает из-за проблемы в программе.
восстановление
Восстановление — это еще одна разница между ошибкой и исключением в C #. Ошибка необратима, а исключение исправимо.
обращение
Кроме того, нет способа обработать ошибку с помощью программы. Однако в программе можно обработать исключение, используя такие ключевые слова, как try, catch, finally.
классификация
Ошибка классифицируется как непроверенный тип, тогда как исключение классифицируется как исключение с проверкой и без проверки. Следовательно, это еще одно различие между ошибкой и исключением в C #.
Примеры
OutOfMemoryError, StackOverFlowError и IOError являются некоторыми примерами ошибок, в то время как ArithmeticException, SQLException и NullPointerException являются некоторыми примерами исключений. Это еще одно различие между ошибкой и исключением в C #.
Заключение
Основное различие между ошибкой и исключением в C # заключается в том, что ошибка возникает из-за недоступности системного ресурса, а исключение возникает из-за проблемы в программе. Вкратце, ошибка — это критическое условие, которое не может быть обработано программой на C #, в то время как Исключение является исключительной ситуацией, которую можно обработать программой на C #.
Ссылка:
1. «Обработка исключений в C #». Www.tutorialspoint.com, Учебное пособие,


В нашей жизни нередко возникают ситуации, которые мы не планировали. К примеру, пошли вы утром умываться и с досадой обнаружили, что отключили воду. Вышли на улицу, сели в машину, а она не заводится. Позвонили другу, а он недоступен. И так далее и тому подобное… В большинстве случаев человек без труда справится с подобными проблемами. А вот как с непредвиденными ситуациями справляется Java, мы сейчас и поговорим.
Что называют исключением. Исключения в мире программирования
В программировании исключением называют возникновение ошибки (ошибок) и различных непредвиденных ситуаций в процессе выполнения программы. Исключения могут появляться как в итоге неправильных действий юзера, так и из-за потери сетевого соединения с сервером, отсутствии нужного ресурса на диске и т. п. Также среди причин исключений — ошибки программирования либо неверное использование API.
При этом в отличие от «человеческого мира», программное приложение должно чётко понимать, как поступать в подобной ситуации. И вот как раз для этого в Java и существует механизм исключений (exception).
Используемые ключевые слова
При обработке исключений в Java применяются следующие ключевые слова:
— try – служит для определения блока кода, в котором может произойти исключение;
— catch – необходим для определения блока кода, где происходит обработка исключения;
— finally – применяется для определения блока кода, являющегося необязательным, однако при его наличии он выполняется в любом случае вне зависимости от результата выполнения блока try.
Вышеперечисленные ключевые слова необходимы для создания в коде ряда специальных обрабатывающих конструкций: try{}finally{}, try{}catch, try{}catch{}finally.
Кроме того:
1. Для возбуждения исключения используем throw.
2. Для предупреждения в сигнатуре методов о том, что метод может выбросить исключение, применяем throws.
Давайте на примере посмотрим, как используются ключевые слова в Java-программе:
//метод считывает строку с клавиатуры public String input() throws MyException {//предупреждаем с помощью throws, // что метод может выбросить исключение MyException BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String s = null; //в блок try заключаем код, в котором может произойти исключение, в данном // случае компилятор нам подсказывает, что метод readLine() класса // BufferedReader может выбросить исключение ввода/вывода try { s = reader.readLine(); // в блок catch заключаем код по обработке исключения IOException } catch (IOException e) { System.out.println(e.getMessage()); // в блоке finally закрываем поток чтения } finally { // при закрытии потока тоже возможно исключение, например, если он не был открыт, поэтому “оборачиваем” код в блок try try { reader.close(); // пишем обработку исключения при закрытии потока чтения } catch (IOException e) { System.out.println(e.getMessage()); } } if (s.equals("")) { // мы решили, что пустая строка может нарушить в дальнейшем работу нашей программы, например, на результате этого метода нам надо вызывать метод substring(1,2), поэтому мы вынуждены прервать выполнение программы с генерацией своего типа исключения MyException с помощью throw throw new MyException("String can not be empty!"); } return s; }Зачем нам механизм исключений?
Для понимания опять приведём пример из обычного мира. Представьте, что на какой-нибудь автодороге имеется участок с аварийным мостом, на котором ограничена грузоподъёмность. И если по такому мосту проедет грузовик со слишком большой массой, мост разрушится, а в момент этого ЧП ситуация для шофёра станет, мягко говоря, исключительной. И вот, дабы такого не произошло, дорожные службы заранее устанавливают на дороге соответствующие предупреждающие знаки. И тогда водитель, посмотрев на знак, сравнит массу своего авто со значением разрешённой грузоподъёмности и примет соответствующее решение, например, поедет по другой дороге.
То есть мы видим, что из-за правильных действий дорожной службы шоферы крупногабаритных транспортных средств:
1) получили возможность заранее изменить свой путь;
2) были предупреждены об опасности;
3) были предупреждены о невозможности проезжать по мосту при определённых условиях.Вот как наш жизненный пример соотносится с применением исключения на Java:
Исходя из вышесказанного, мы можем назвать одну из причин применения исключений в Java. Заключается она в возможности предупреждения исключительной ситуации для её последующего разрешения и продолжения работы программы. То есть механизм исключений позволит защитить написанный код от неверного применения пользователем путём валидации входящих данных.
Что же, давайте ещё раз побудем дорожной службой. Чтобы установить знак, мы ведь должны знать места, где водителей ТС могут ждать различные неприятности. Это первое. Далее, нам ведь надо заготовить и установить знаки. Это второе. И, наконец, надо предусмотреть маршруты объезда, позволяющие избежать опасности.
В общем, механизм исключений в Java работает схожим образом. На стадии разработки программы мы выполняем «ограждение» опасных участков кода в отношении наших исключений, используя блок try{}. Чтобы предусмотреть запасные пути, применяем блок catch{}. Код, выполняемый в программе при любом исходе, пишем в блоке finally{}.
Иногда бывает, что мы не можем предусмотреть «запасной аэродром» либо специально желаем предоставить право его выбора юзеру. Но всё равно мы должны как минимум предупредить пользователя об опасности. Иначе он превратится в разъярённого шофёра, который ехал долго, не встретил ни одного предупреждающего знака и в итоге добрался до аварийного моста, проехать по которому не представляется возможным.
Что касается программирования на Java, то мы, когда пишем свои классы и методы, далеко не всегда можем предвидеть контекст их применения другими программистами в своих программах, а значит, не можем со стопроцентной вероятностью предвидеть правильный путь для разрешения исключительных ситуаций. Но предупредить коллег о возможной исключительной ситуации мы всё-таки должны, и это не что иное, как правило хорошего тона.
Выполнить это правило в Java нам как раз и помогает механизм исключений с помощью throws. Выбрасывая исключение, мы, по сути, объявляем общее поведение нашего метода и предоставляем пользователю метода право написания кода по обработке исключения.
Предупреждаем о неприятностях
Если мы не планируем обрабатывать исключение в собственном методе, но желаем предупредить пользователей метода о возможной исключительной ситуации, мы используем, как это уже было упомянуто, ключевое слово throws. В сигнатуре метода оно означает, что при некоторых обстоятельствах метод может выбросить исключение. Это предупреждение становится частью интерфейса метода и даёт право пользователю на создание своего варианта реализации обработчика исключения.
После упоминания ключевого слова throws мы указываем тип исключения. Как правило, речь идёт о наследниках класса Exception Java. Но так как Java — это объектно-ориентированный язык программирования, все исключения представляют собой объекты.
Иерархия исключений в Java
Когда возникают ошибки при выполнении программы, исполняющая среда Java Virtual Machine обеспечивает создание объекта нужного типа, используя иерархию исключений Java — речь идёт о множестве возможных исключительных ситуаций, которые унаследованы от класса Throwable — общего предка. При этом исключительные ситуации, которые возникают в программе, делят на 2 группы:
1. Ситуации, при которых восстановление нормальной дальнейшей работы невозможно.
2. Ситуации с возможностью восстановления.К первой группе можно отнести случаи, при которых возникают исключения, которые унаследованы из класса Error. Это ошибки, возникающие во время выполнения программы при сбое работы Java Virtual Machine, переполнении памяти либо сбое системы. Как правило, такие ошибки говорят о серьёзных проблемах, устранение которых программными средствами невозможно. Данный вид исключений в Java относят к неконтролируемым исключениям на стадии компиляции (unchecked). К этой же группе относятся и исключения-наследники класса Exception, генерируемые Java Virtual Machine в процессе выполнения программы — RuntimeException. Данные исключения тоже считаются unchecked на стадии компиляции, а значит, написание кода по их обработке необязательно.
Что касается второй группы, то к ней относят ситуации, которые можно предвидеть ещё на стадии написания приложения, поэтому для них код обработки должен быть написан. Это контролируемые исключения (checked). И в большинстве случаев Java-разработчики работают именно с этими исключениями, выполняя их обработку.
Создание исключения
В процессе исполнения программы исключение генерируется Java Virtual Machine либо вручную посредством оператора throw. В таком случае в памяти происходит создание объекта исключения, выполнение основного кода прерывается, а встроенный в JVM обработчик исключений пробует найти способ обработать это самое исключение.
Обработка исключения
Обработка исключений в Java подразумевает создание блоков кода и производится в программе посредством конструкций try{}finally{}, try{}catch, try{}catch{}finally.
В процессе возбуждения исключения в try обработчик исключения ищется в блоке catch, который следует за try. При этом если в catch присутствует обработчик данного вида исключения, происходит передача управления ему. Если же нет, JVM осуществляет поиск обработчика данного типа исключения, используя для этого цепочку вызова методов. И так происходит до тех пор, пока не находится подходящий catch. После того, как блок catch выполнится, управление переходит в необязательный блок finally. Если подходящий блок catch найден не будет, Java Virtual Machine остановит выполнение программы, выведя стек вызовов методов под названием stack trace. Причём перед этим выполнится код блока finally при наличии такового.
Рассмотрим практический пример обработки исключений:
public class Print { void print(String s) { if (s == null) { throw new NullPointerException("Exception: s is null!"); } System.out.println("Inside method print: " + s); } public static void main(String[] args) { Print print = new Print(); List list= Arrays.asList("first step", null, "second step"); for (String s:list) { try { print.print(s); } catch (NullPointerException e) { System.out.println(e.getMessage()); System.out.println("Exception was processed. Program continues"); } finally { System.out.println("Inside bloсk finally"); } System.out.println("Go program...."); System.out.println("-----------------"); } } }А теперь глянем на результаты работы метода main:
Inside method print: first step Inside bloсk finally Go program.... ----------------- Exception: s is null! Exception was processed. Program continues Inside bloсk finally Go program.... ----------------- Inside method print: second step Inside bloсk finally Go program.... -----------------Блок finally чаще всего используют, чтобы закрыть открытые в try потоки либо освободить ресурсы. Но при написании программы уследить за закрытием всех ресурсов возможно не всегда. Чтобы облегчить жизнь разработчикам Java, была предложена конструкция try-with-resources, автоматически закрывающая ресурсы, открытые в try. Используя try-with-resources, мы можем переписать наш первый пример следующим образом:
public String input() throws MyException { String s = null; try(BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))){ s = reader.readLine(); } catch (IOException e) { System.out.println(e.getMessage()); } if (s.equals("")){ throw new MyException ("String can not be empty!"); } return s; }А благодаря появившимся возможностям Java начиная с седьмой версии, мы можем ещё и объединять в одном блоке перехват разнотипных исключений, делая код компактнее и читабельнее:
public String input() { String s = null; try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) { s = reader.readLine(); if (s.equals("")) { throw new MyException("String can not be empty!"); } } catch (IOException | MyException e) { System.out.println(e.getMessage()); } return s; }Итоги
Итак, применение исключений в Java повышает отказоустойчивость программы благодаря использованию запасных путей. Кроме того, появляется возможность отделить код обработки исключительных ситуаций от логики основного кода за счёт блоков catch и переложить обработку исключений на пользователя кода посредством throws.
Основные вопросы об исключениях в Java
1.Что такое проверяемые и непроверяемые исключения?
Если говорить коротко, то первые должны быть явно пойманы в теле метода либо объявлены в секции throws метода. Вторые вызываются проблемами, которые не могут быть решены. Например, это нулевой указатель или деление на ноль. Проверяемые исключения очень важны, ведь от других программистов, использующих ваш API, вы ожидаете, что они знают, как обращаться с исключениями. К примеру, наиболее часто встречаемое проверяемое исключение — IOException, непроверяемое — RuntimeException.
2.Почему переменные, определённые в try, нельзя использовать в catch либо finally?
Давайте посмотрим на нижеследующий код. Обратите внимание, что строку s, которая объявлена в блоке try, нельзя применять в блоке catch. То есть данный код не скомпилируется.try { File file = new File("path"); FileInputStream fis = new FileInputStream(file); String s = "inside"; } catch (FileNotFoundException e) { e.printStackTrace(); System.out.println(s); }А всё потому, что неизвестно, где конкретно в try могло быть вызвано исключение. Вполне вероятно, что оно было вызвано до объявления объекта.
3.Почему Integer.parseInt(null) и Double.parseDouble(null) вызывают разные исключения?
Это проблема JDK. Так как они были разработаны разными людьми, то заморачиваться вам над этим не стоит:Integer.parseInt(null); // вызывает java.lang.NumberFormatException: null Double.parseDouble(null); // вызывает java.lang.NullPointerException4.Каковы основные runtime exceptions в Java?
Вот лишь некоторые из них:IllegalArgumentException ArrayIndexOutOfBoundsExceptionИх можно задействовать в операторе if, если условие не выполняется:
if (obj == null) { throw new IllegalArgumentException("obj не может быть равно null");5.Возможно ли поймать в одном блоке catch несколько исключений?
Вполне. Пока классы данных исключений можно отследить вверх по иерархии наследования классов до одного и того же суперкласса, возможно применение только этого суперкласса.
6.Способен ли конструктор вызывать исключения?
Способен, ведь конструктор — это лишь особый вид метода.class FileReader{ public FileInputStream fis = null; public FileReader() throws IOException{ File dir = new File(".");//get current directory File fin = new File(dir.getCanonicalPath() + File.separator + "not-existing-file.txt"); fis = new FileInputStream(fin); } }7.Возможен ли вызов исключений в final?
В принципе, можете сделать таким образом:public static void main(String[] args) { File file1 = new File("path1"); File file2 = new File("path2"); try { FileInputStream fis = new FileInputStream(file1); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { try { FileInputStream fis = new FileInputStream(file2); } catch (FileNotFoundException e) { e.printStackTrace(); } } }Но если желаете сохранить читабельность, объявите вложенный блок try-catch в качестве нового метода и вставьте вызов данного метода в блок finally.
finally. public static void main(String[] args) { File file1 = new File("path1"); File file2 = new File("path2"); try { FileInputStream fis = new FileInputStream(file1); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { methodThrowException(); } }
Различия между исключением и ошибкой
Я пытаюсь узнать больше о базовой Java и различных типах Throwables, может ли кто-нибудь сообщить мне о различиях между исключениями и ошибками?
10 ответов
ошибки не должны быть пойманы или обработаны (за исключением редких случаев). Исключения-это хлеб с маслом обработки исключений. The Javadoc объясняет это так:
ошибка-это подкласс Throwable, который указывает на серьезные проблемы, которые
разумное применение не должно пытаться поймать. Большинство таких ошибок являются аномальными
условия.
посмотрите на несколько подклассов Error, принимая некоторые из их JavaDoc комментарии:
-
AnnotationFormatError— выбрасывается, когда анализатор аннотаций пытается прочитать аннотацию из файла класса и определяет, что аннотация является неправильной. -
AssertionError— брошенный, чтобы указать, что утверждение не удалось. -
LinkageError— подклассы LinkageError указывают, что класс имеет некоторую зависимость от другого класса; однако последний класс несовместимо изменился после компиляции первого класса. -
VirtualMachineError— брошено, чтобы указать, что виртуальная машина Java сломана или исчерпала ресурсы, необходимые для ее продолжения работы.
есть действительно три важные подкатегории Throwable:
-
Error— Что-то достаточно серьезное пошло не так большинство приложений должны разбиться, а не пытаться справиться с проблемой, - непроверенное исключение (он же
RuntimeException) — очень часто ошибка программирования, такая какNullPointerExceptionили незаконный аргумент. Приложения иногда могут обрабатывать или восстанавливаться из этогоThrowableкатегория — или по крайней мере поймать его на нитиrun()метод, зарегистрируйте жалобу и продолжайте работать. - проверено исключение (ака все остальное) — приложения, как ожидается, смогут поймать и осмысленно сделать что-то с остальными, например
FileNotFoundExceptionиTimeoutException…
ошибки, как правило, сигнализируют о конце вашего приложения, как вы его знаете. Обычно он не может быть восстановлен и должен привести к выходу вашей виртуальной машины. Поймать их не следует делать, кроме как, возможно, войти или отобразить и соответствующее сообщение перед выходом.
пример:
Исключение OutOfMemoryError — не много вы можете сделать, так как ваша программа не может работать.
исключения часто восстанавливаются, и даже если нет, они обычно просто означают неудачную попытку операции, но ваша программа все еще может продолжаться.
пример:
IllegalArgumentException — передал недопустимые данные методу, так что вызов метода не удался, но это не влияет на будущие операции.
это упрощенные примеры,и есть еще одно богатство информации только об исключениях.
Солнце ставит его лучше всего:
ошибка является подклассом Throwable
это указывает на серьезные проблемы, которые
разумное применение не должно пытаться
ловить.
ошибки —
-
Errors в java имеют типjava.lang.Error. - все ошибки в java являются непроверенным типом.
-
Errors происходит во время выполнения. Они не будут известны компилятору. - невозможно восстановить от ошибок.
-
Errors в основном вызваны средой, в которой работает приложение. -
примеры :
java.lang.StackOverflowError,java.lang.OutOfMemoryError
исключения —
-
Exceptions в java имеют типjava.lang.Exception. -
Exceptions включают как проверенный, так и непроверенный тип. - проверенные исключения известны компилятору, где как непроверенные исключения не известны компилятору, потому что они происходят во время выполнения.
- вы можете восстановить из исключений, обрабатывая их через
try-catchблоки. -
Exceptions в основном вызваны самим приложением. -
примеры : Проверенные Исключения :
SQLException,IOException
Непроверенные Исключения:ArrayIndexOutOfBoundException,ClassCastException,NullPointerException
дальнейшее чтение:http://javaconceptoftheday.com/difference-between-error-vs-exception-in-java/

описание Error класс вполне понятен:
An
Errorявляется наследникомThrowable
это указывает на серьезные проблемы, которые
разумное применение не должно пытаться
ловить. Большинство таких ошибок
аномальные условия. TheThreadDeath
ошибка, хотя и» нормальное » состояние,
также подклассErrorпотому что большинство
приложения не должны пытаться поймать
он.метод не требуется объявлять в
throws пункт любой подклассы
ErrorЭто может быть брошено во время
выполнение метода, но не
пойман, так как эти ошибки
ненормальные условия, которые никогда не должны
происходить.
цитируется из собственного Java документация класс Error.
короче говоря, вы не должны поймать Errors, за исключением того, что у вас есть веская причина сделать это. (Например, чтобы предотвратить сбой реализации веб-сервера, если у сервлета заканчивается память или что-то вроде что.)
An 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Это первое, что считается unchecked исключение для проверки исключений во время компиляции. В результате код метанияjava.lang.Errorили его подклассы не требуют объявления этой ошибки в заголовке метода. При броскеjava.lang.Exceptionобязательное объявление в заголовке метода.
Throwable и его диаграмма классов-преемников (свойства и методы опущены).

2
автор: Mikhailov Valentine
IMO ошибка-это то, что может привести к сбою вашего приложения и не должно обрабатываться. Исключение-это то, что может вызвать непредсказуемые результаты, но может быть восстановлено.
пример:
Если у программы закончилась память, это ошибка, так как приложение не может продолжаться. Однако если программа принимает неверный тип ввода, это исключение, так как программа может обрабатывать его и перенаправлять для получения правильного типа ввода.
вот довольно хорошее резюме от Java API, что представляет собой ошибка и исключение:
ошибка-это подкласс Throwable, который указывает на серьезные проблемы, которые разумное приложение не должно пытаться поймать. Большинство таких ошибок-ненормальные условия. Ошибка ThreadDeath, хотя и является» нормальным » условием, также является подклассом ошибки, потому что большинство приложений не должны пытаться ее поймать.
метод не требуется объявлять в
его броски клаузула любые подклассы
Ошибка, которая может возникнуть во время
выполнение метода, но не
пойман, так как эти ошибки
ненормальные условия, которые никогда не должны
происходить.
OTOH, для исключений, Java API говорит:
исключение класса и его подклассы являются формой Throwable, которая указывает условия, которые разумное приложение может захотеть поймать.
ошибки в основном вызваны средой, в которой работает приложение. Например, OutOfMemoryError возникает, когда у JVM заканчивается память или StackOverflowError возникает при переполнении стека.
исключения в основном вызваны самим приложением. Например NullPointerException возникает, когда приложение пытается получить доступ к нулевому объекту или ClassCastException возникает, когда приложение пытается привести несовместимые типы классов.
источник : разница Между Ошибкой И Исключением В Java


