[java] 예외와 오류의 차이점

기본 Java 및 다양한 유형의 Throwable에 대해 자세히 배우려고하는데 예외와 오류의 차이점을 누군가에게 알려 줄 수 있습니까?



답변

오류를 포착하거나 처리해서는 안됩니다 (가장 드문 경우 제외). 예외 처리의 빵과 버터는 예외입니다. 자바 독은 잘 설명 :

Error는 합리적인 응용 프로그램이 포착하려고하지 않아야하는 심각한 문제를 나타내는 Throwable의 하위 클래스입니다. 이러한 오류는 대부분 비정상적인 상태입니다.

ErrorJavaDoc 주석 중 일부를 사용하여 의 서브 클래스를 살펴보십시오 .

  • AnnotationFormatError -주석 파서가 클래스 파일에서 주석을 읽으려고 시도하고 주석이 잘못되었다고 판단 할 때 발생합니다.
  • AssertionError -어설 션이 실패했음을 나타냅니다.
  • LinkageError-LinkageError의 서브 클래스는 클래스가 다른 클래스에 대한 종속성을 가지고 있음을 나타냅니다. 그러나 후자의 클래스는 이전 클래스의 컴파일 후 호환되지 않게 변경되었습니다.
  • VirtualMachineError -Java Virtual Machine이 손상되었거나 계속 작동하는 데 필요한 자원이 부족함을 나타냅니다.

다음과 같은 세 가지 중요한 하위 범주가 있습니다 Throwable.

  • Error -충분히 심각한 문제가 발생하여 대부분의 응용 프로그램이 문제를 처리하려고하기보다는 충돌해야합니다.
  • 검사되지 않은 예외 (일명 RuntimeException)-매우 자주 NullPointerException또는 잘못된 인수 와 같은 프로그래밍 오류 . 응용 프로그램은 때때로이 Throwable범주를 처리하거나 복구 할 수 있습니다. 또는 최소한 Thread의 run()메서드 에서이를 파악 하여 불만 사항을 기록한 후 계속 실행할 수 있습니다.
  • 검사 예외는 (다른 모든 일명) – 응용 프로그램은 같은 캐치 의미 나머지 뭔가를 할 수있을 것으로 예상된다 FileNotFoundExceptionTimeoutException

답변

@ georgios-gousios 의 Java 예외 계층 구조보여주는슬라이드는 Java의 오류와 예외의 차이점을 간결하게 설명합니다.

자바 예외 계층


답변

오류는 알고있는 것처럼 응용 프로그램의 끝을 알리는 경향이 있습니다. 일반적으로 복구 할 수 없으며 VM을 종료해야합니다. 종료하기 전에 로그 나 표시 및 적절한 메시지를 제외하고는이를 캐치하지 마십시오.

예 : OutOfMemoryError- 프로그램을 더 이상 실행할 수 없기 때문에 할 수있는 일이 많지 않습니다.

예외는 종종 복구 가능하며, 그렇지 않은 경우에도 일반적으로 시도 된 작업이 실패했음을 의미하지만 프로그램은 계속 수행 할 수 있습니다.

예 : IllegalArgumentException- 유효하지 않은 데이터를 메소드에 전달하여 메소드 호출에 실패했지만 이후 작업에는 영향을 미치지 않습니다.

이들은 단순한 예이며 예외 만에 대한 또 다른 풍부한 정보가 있습니다.


답변

오류

  1. Errorjava의 s 유형 java.lang.Error입니다.
  2. Java의 모든 오류는 검사되지 않은 유형입니다.
  3. Error런타임에 발생합니다. 그들은 컴파일러에게 알려지지 않을 것입니다.
  4. 오류를 복구하는 것은 불가능합니다.
  5. Error주로 응용 프로그램이 실행되는 환경에서 발생합니다.
  6. 예 : java.lang.StackOverflowError ,java.lang.OutOfMemoryError

예외

  1. Exceptionjava의 s 유형 java.lang.Exception입니다.
  2. Exceptions는 검사 유형과 선택되지 않은 유형을 모두 포함합니다.
  3. 검사 된 예외는 런타임에 발생하기 때문에 검사되지 않은 예외는 컴파일러에 알려지지 않은 것으로 컴파일러에 알려져 있습니다.
  4. try-catch블록을 통해 예외를 처리하여 예외를 복구 할 수 있습니다 .
  5. Exception주로 응용 프로그램 자체에 의해 발생합니다.
  6. 예 : 검사 예외 : SQLException, IOException
    체크되지 않는 예외 : ArrayIndexOutOfBoundException, ClassCastException,NullPointerException

더 읽을 거리 : http://javaconceptoftheday.com/difference-between-error-vs-exception-in-java/
http://javaconceptoftheday.com/wp-content/uploads/2015/04/ErrorVsException.png


답변

은 다음과 같이 최선을 다합니다 .

Error는 합리적인 응용 프로그램이 포착하려고하지 않아야하는 심각한 문제를 나타내는 Throwable의 하위 클래스입니다.


답변

Error수업에 대한 설명 은 매우 분명합니다.

Error하위 클래스 Throwable
는 합리적인 응용 프로그램이 포착하려고 시도해서는 안되는 심각한 문제를 나타냅니다. 이러한 오류는 대부분 비정상적인 상태입니다. ThreadDeath
에러는 「정상」인 상태입니다 만, 또한의 하위 클래스 Error대부분의 어플리케이션에서는 캐치해서는 안되기 때문이다.

메소드는 throws 절 Error에서 메소드 실행 중에 발생하지만 포착되지 않는 서브 클래스를 선언 할 필요는 없습니다.
이러한 오류는 절대 발생하지 않아야하는 비정상적인 조건이기 때문입니다.

클래스Error 자체 에 대한 Java 자체 문서 에서 인용했습니다 .

간단히 말해서, Error타당한 이유가 없다면 s를 잡아서는 안됩니다 . (예를 들어 서블릿에 메모리가 부족한 경우 웹 서버 구현이 중단되는 것을 방지하기 위해)

Exception, 다른 한편으로는, 다른 현대적인 언어처럼 정상적인 예외입니다. Java API 문서 또는 온라인 또는 오프라인 자원에 자세한 설명이 있습니다.


답변

몇 가지 유사점과 클래스의 차이가있다 java.lang.Exceptionjava.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.Errorjava.lang.Exception따르며 메서드 헤더에 선언 할 수 있으며 catch절에있을 수 있으며 keyword와 함께 사용할 수 있습니다 throw.

차이점 :

  • 첫 번째-개념상의 차이 : java.lang.ErrorJVM에서 발생하도록 설계되었으며 심각한 문제를 나타내며 잡히지 않고 프로그램 실행을 중지하려고합니다 (그러나 다른 java.lang.Throwable후속 작업 에서도 가능합니다 ).

    에 대한 javadoc 설명 의 구절 java.lang.Error:

    … 적당한 응용 프로그램이 포착하려고 시도해서는 안되는 심각한 문제를 나타냅니다.

    반대로 java.lang.Exception, 프로그램 실행을 종료하지 않고 프로그래머가 예상하고 처리 할 수있는 오류를 나타내도록 설계되었습니다.

    에 대한 javadoc 설명 의 구절 java.lang.Exception:

    … 적합한 응용 프로그램이 잡을 수있는 조건을 나타냅니다.

  • 초 사이의 차이 java.lang.Errorjava.lang.Exception그는 먼저 간주 체크 컴파일 시간 예외 검사 용 예외. 결과 코드가 throw java.lang.Error되거나 해당 하위 클래스가이 오류를 메서드 헤더에 선언 할 필요가 없습니다. java.lang.Exception메소드 헤더에 필요한 선언을 던지는 동안

Throwable 및 후속 클래스 다이어그램 (속성 및 메소드는 생략 됨).
여기에 이미지 설명을 입력하십시오