답변:
오류를 포착하거나 처리해서는 안됩니다 (가장 드문 경우 제외). 예외 처리의 빵과 버터는 예외입니다. 자바 독은 잘 설명 :
Error는 합리적인 응용 프로그램이 포착하려고하지 않아야하는 심각한 문제를 나타내는 Throwable의 하위 클래스입니다. 이러한 오류는 대부분 비정상적인 상태입니다.
Error
JavaDoc 주석 중 일부를 사용하여 의 서브 클래스를 살펴보십시오 .
AnnotationFormatError
-주석 파서가 클래스 파일에서 주석을 읽으려고 시도하고 주석이 잘못되었다고 판단 할 때 발생합니다.AssertionError
-어설 션이 실패했음을 나타냅니다.LinkageError
-LinkageError의 서브 클래스는 클래스가 다른 클래스에 대한 종속성을 가지고 있음을 나타냅니다. 그러나 후자의 클래스는 이전 클래스의 컴파일 후 호환되지 않게 변경되었습니다.VirtualMachineError
-Java Virtual Machine이 손상되었거나 계속 작동하는 데 필요한 자원이 부족함을 나타냅니다. 다음과 같은 세 가지 중요한 하위 범주가 있습니다 Throwable
.
Error
-충분히 심각한 문제가 발생하여 대부분의 응용 프로그램이 문제를 처리하려고하기보다는 충돌해야합니다.RuntimeException
)-매우 자주 NullPointerException
또는 잘못된 인수 와 같은 프로그래밍 오류 . 응용 프로그램은 때때로이 Throwable
범주를 처리하거나 복구 할 수 있습니다. 또는 최소한 Thread의 run()
메서드 에서이를 파악 하여 불만 사항을 기록한 후 계속 실행할 수 있습니다.FileNotFoundException
및 TimeoutException
...@ georgios-gousios 의 Java 예외 계층 구조 를 보여주는 이 슬라이드는 Java의 오류와 예외의 차이점을 간결하게 설명합니다.
오류는 알고있는 것처럼 응용 프로그램의 끝을 알리는 경향이 있습니다. 일반적으로 복구 할 수 없으며 VM을 종료해야합니다. 종료하기 전에 로그 나 표시 및 적절한 메시지를 제외하고는이를 캐치하지 마십시오.
예 : OutOfMemoryError- 프로그램을 더 이상 실행할 수 없기 때문에 할 수있는 일이 많지 않습니다.
예외는 종종 복구 가능하며, 그렇지 않은 경우에도 일반적으로 시도 된 작업이 실패했음을 의미하지만 프로그램은 계속 수행 할 수 있습니다.
예 : IllegalArgumentException- 유효하지 않은 데이터를 메소드에 전달하여 메소드 호출에 실패했지만 이후 작업에는 영향을 미치지 않습니다.
이들은 단순한 예이며 예외 만에 대한 또 다른 풍부한 정보가 있습니다.
오류 -
Error
java의 s 유형 java.lang.Error
입니다.Error
런타임에 발생합니다. 그들은 컴파일러에게 알려지지 않을 것입니다. Error
주로 응용 프로그램이 실행되는 환경에서 발생합니다. java.lang.StackOverflowError
,java.lang.OutOfMemoryError
예외 -
Exception
java의 s 유형 java.lang.Exception
입니다.Exception
s는 검사 유형과 선택되지 않은 유형을 모두 포함합니다.try-catch
블록을 통해 예외를 처리하여 예외를 복구 할 수 있습니다 .Exception
주로 응용 프로그램 자체에 의해 발생합니다.SQLException
, IOException
ArrayIndexOutOfBoundException
, ClassCastException
,NullPointerException
더 읽을 거리 : http://javaconceptoftheday.com/difference-between-error-vs-exception-in-java/
Error는 합리적인 응용 프로그램이 포착하려고하지 않아야하는 심각한 문제를 나타내는 Throwable의 하위 클래스입니다.
Error
수업에 대한 설명 은 매우 분명합니다.
의
Error
하위 클래스Throwable
는 합리적인 응용 프로그램이 포착하려고 시도해서는 안되는 심각한 문제를 나타냅니다. 이러한 오류는 대부분 비정상적인 상태입니다.ThreadDeath
에러는 「정상」인 상태입니다 만, 또한의 하위 클래스Error
대부분의 어플리케이션에서는 캐치해서는 안되기 때문이다.메소드는 throws 절
Error
에서 메소드 실행 중에 발생하지만 포착되지 않는 서브 클래스를 선언 할 필요는 없습니다. 이러한 오류는 절대 발생하지 않아야하는 비정상적인 조건이기 때문입니다.
클래스Error
자체 에 대한 Java 자체 문서 에서 인용했습니다 .
간단히 말해서, Error
타당한 이유가 없다면 s를 잡아서는 안됩니다 . (예를 들어 서블릿에 메모리가 부족한 경우 웹 서버 구현이 중단되는 것을 방지하기 위해)
는 Exception
, 다른 한편으로는, 다른 현대적인 언어처럼 정상적인 예외입니다. Java API 문서 또는 온라인 또는 오프라인 자원에 자세한 설명이 있습니다.
몇 가지 유사점과 클래스의 차이가있다 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
절에있을 수 있으며 keyword와 함께 사용할 수 있습니다 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
그는 먼저 간주 체크 컴파일 시간 예외 검사 용 예외. 결과 코드가 throw java.lang.Error
되거나 해당 하위 클래스가이 오류를 메서드 헤더에 선언 할 필요가 없습니다. java.lang.Exception
메소드 헤더에 필요한 선언을 던지는 동안오류는 주로 응용 프로그램이 실행되는 환경에서 발생합니다. 예를 들어, OutOfMemoryError는 JVM에 메모리가 부족할 때 발생하거나 StackOverflowError는 스택이 오버 플로우 될 때 발생합니다.
예외는 주로 응용 프로그램 자체에 의해 발생합니다. 예를 들어 NullPointerException은 응용 프로그램이 null 개체에 액세스하려고 할 때 발생하거나 응용 프로그램이 호환되지 않는 클래스 유형을 캐스팅하려고 할 때 발생합니다.
출처 : Java의 오류 대 예외의 차이점
다음은 오류 및 예외가 나타내는 Java API의 요약입니다.
Error는 합리적인 응용 프로그램이 포착하려고하지 않아야하는 심각한 문제를 나타내는 Throwable의 하위 클래스입니다. 이러한 오류는 대부분 비정상적인 상태입니다. "정상"조건이지만 ThreadDeath 오류는 대부분의 응용 프로그램이이를 포착하려고 시도하지 않기 때문에 Error의 하위 클래스이기도합니다.
메소드는 throws 절에서 메소드 실행 중에 발생하지만 포착되지 않는 Error의 서브 클래스를 선언 할 필요는 없습니다. 이러한 오류는 절대 발생하지 않아야하는 비정상적인 조건이기 때문입니다.
OTOH, 예외의 경우 Java API는 다음과 같이 말합니다.
Exception 클래스와 그 서브 클래스는 합리적인 응용 프로그램이 잡을 수있는 조건을 나타내는 Throwable 형식입니다.
응용 프로그램이나 프로그램이 실행되는 환경에서 오류가 발생합니다. 대부분의 경우 응용 프로그램이나 프로그램이 종료되므로 복구 할 수 없습니다. Javadoc은 그러한 오류에 대한 JVM과 같은 환경이 어쨌든 종료되기 때문에 그러한 오류를 잡는 것을 귀찮게하지 말라고 권고했습니다.
예 :
VirtualMachineError
-JVM (Java Virtual Machine)이 손상되었거나 계속 작동하는 데 필요한 자원이 부족함을 나타냅니다.
OutOfMemoryError
JVM에 메모리 StackOverflowError
가 부족하거나
스택이 초과 될 때 발생합니다.
응용 프로그램이나 프로그램 자체에 의해 예외가 발생합니다. 아마도 당신의 실수 때문일 것입니다. 대부분의 경우 복구 할 수 있으며 응용 프로그램은 계속 실행됩니다. 이러한 오류를 포착하여 응용 프로그램이나 프로그램의 비정상 종료를 방지하고 예외 메시지를 사용자 정의하여 사용자가 모든 곳에 흩어져있는 기본 못생긴 예외 메시지 대신 멋진 형식의 메시지를 볼 수 있도록하는 것이 좋습니다.
예 :
NullPointerException
응용 프로그램이 null 개체에 액세스하려고 할 때 발생합니다. 또는 존재하지 않는 인덱스로 배열에 액세스하려고하거나 잘못된 데이터 또는 매개 변수로 함수를 호출하려고합니다.
Unchecked exceptions != RuntimeExceptions
.Unchecked exceptions = RuntimeExceptions + Errors
. 나는 그것이 질문을 제기한다는 것을 알고 있습니다 : 오류는 예외입니까? 그러나 이것이 그들이 쓰는 것입니다. docs.oracle.com/javase/tutorial/essential/exceptions/… 중 하나입니다 .