문제

기본 Java와 다양한 유형의 Throwable에 대해 자세히 알아보려고 합니다. 예외와 오류의 차이점을 알려주실 수 있나요?

도움이 되었습니까?

해결책

오류는 잡히거나 처리해서는 안됩니다 (가장 희귀 한 사례 제외). 예외는 예외 처리의 빵과 버터입니다. 그만큼 Javadoc 잘 설명합니다 :

오류는 합리적인 애플리케이션이 포착하지 말아야 할 심각한 문제를 나타내는 Throwable의 서브 클래스입니다. 이러한 오류는 대부분 비정상적인 조건입니다.

몇 가지 서브 클래스를보십시오 Error, 그들의 javadoc 의견을 가져 가기 :

  • AnnotationFormatError - 주석 파서가 클래스 파일에서 주석을 읽으려고 시도하고 주석이 기형되었다고 판단 할 때 던졌습니다.
  • AssertionError - 주장이 실패했음을 나타 내기 위해 던졌습니다.
  • LinkageError -LinkageError의 서브 클래스는 클래스가 다른 클래스에 대한 의존성을 가지고 있음을 나타냅니다. 그러나 후자의 클래스는 이전 클래스의 편집 후에 호환되지 않게 변경되었습니다.
  • VirtualMachineError - Java 가상 머신이 파손되었거나 계속 작동하는 데 필요한 자원이 부족한 것을 나타냅니다.

실제로 세 가지 중요한 하위 범주가 있습니다 Throwable:

  • Error - 충분히 심각한 문제가 발생했습니다. 대부분의 응용 프로그램은 문제를 처리하려고 시도하는 대신 충돌해야합니다.
  • 확인되지 않은 예외 (일명 RuntimeException) - 매우 종종 A와 같은 프로그래밍 오류 NullPointerException 또는 불법적 인 주장. 응용 프로그램은 때때로 이것을 처리하거나 복구 할 수 있습니다 Throwable 카테고리 - 또는 적어도 스레드에서 잡아 run() 방법, 불만 사항을 기록하고 계속 실행하십시오.
  • 점검 된 예외 (일명 기타 모든 것) - 응용 프로그램은 나머지와 같은 것을 잡아서 의미있게 할 수있을 것으로 예상됩니다. FileNotFoundException 그리고 TimeoutException...

다른 팁

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

Java Exception Hierarchy

오류는 여러분이 알고 있는 것처럼 애플리케이션이 종료되었음을 알리는 경향이 있습니다.일반적으로 복구할 수 없으며 VM이 종료됩니다.종료하기 전에 기록하거나 표시하고 적절한 메시지를 표시하는 경우를 제외하고는 이러한 항목을 잡아서는 안 됩니다.

예:메모리 부족오류 - 프로그램을 더 이상 실행할 수 없으므로 할 수 있는 일이 많지 않습니다.

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

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

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

최선을 다합니다:

오류는 합리적인 애플리케이션이 포착하지 말아야 할 심각한 문제를 나타내는 Throwable의 서브 클래스입니다.

오류 -

  1. ErrorJava의 S는 유형입니다 java.lang.Error.
  2. Java의 모든 오류는 확인되지 않은 유형입니다.
  3. Error실행 시간에 발생합니다. 그들은 컴파일러로 알려지지 않을 것입니다.
  4. 오류에서 복구하는 것은 불가능합니다.
  5. ErrorS는 대부분 애플리케이션이 실행되는 환경으로 인해 발생합니다.
  6. 예 : java.lang.StackOverflowError, java.lang.OutOfMemoryError

예외 -

  1. ExceptionJava의 S는 유형입니다 java.lang.Exception.
  2. Exceptions는 확인되지 않은 유형뿐만 아니라 확인 된 유형을 모두 포함합니다.
  3. 점검 된 예외는 점검되지 않은 예외가 런타임에 발생하기 때문에 컴파일러에 알려지지 않은 경우 컴파일러로 알려져 있습니다.
  4. 예외를 처리하여 예외에서 복구 할 수 있습니다 try-catch 블록.
  5. ExceptionS는 주로 응용 프로그램 자체에 의해 발생합니다.
  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 수업은 분명합니다.

an Error 서브 클래스입니다 Throwable이는 합리적인 응용 프로그램이 붙잡 으려고해서는 안된다는 심각한 문제를 나타냅니다. 이러한 오류는 대부분 비정상적인 조건입니다. 그만큼 ThreadDeath오류는 "정상적인"조건이지만 서브 클래스입니다. Error 대부분의 응용 프로그램은 그것을 잡으려고하지 않아야하기 때문입니다.

메소드는 Throws 조항에서의 하위 클래스를 선언 할 필요가 없습니다. Error 이 오류는 발생하지 않아야 할 비정상적인 조건이기 때문에 방법을 실행하는 동안 던져 질 수 있지만 잡히지 않을 수 있습니다.

Java 자신의 인용 수업 문서 Error.

요컨대, 당신은 잡아서는 안됩니다 ErrorS, 당신은 그렇게할만한 이유가 있다는 것을 제외하고. (예를 들어, 서블릿이 메모리 나 그와 비슷한 것이 부족한 경우 웹 서버 구현이 중단되는 것을 방지합니다.)

an Exception, 반면에, 다른 현대 언어와 마찬가지로 정상적인 예외입니다. Java API 문서 또는 온라인 또는 오프라인 리소스에 자세한 설명이 있습니다.

수업간에 몇 가지 유사점과 차이점이 있습니다 java.lang.Exception 그리고 java.lang.Error.

유사성 :

  • 먼저 - 두 수업 모두 확장됩니다 java.lang.Throwable 결과적으로 다음과 같은 오류를 처리 할 때 사용되는 공통적 인 많은 방법을 상속합니다. getMessage, getStackTrace, printStackTrace 등등.

  • 둘째, 서브 클래스로 java.lang.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 및 그 후속 클래스 다이어그램 (속성 및 방법이 생략 됨).enter image description here

IMO AN 오류는 응용 프로그램이 실패하고 처리되지 않아야하는 오류입니다. 예외는 예측할 수없는 결과를 초래할 수 있지만 회복 할 수있는 것입니다.

예시:

프로그램에 메모리가 부족한 경우 응용 프로그램이 계속 될 수 없으므로 오류입니다. 그러나 프로그램이 잘못된 입력 유형을 수용하면 프로그램이 처리하고 올바른 입력 유형을 수신하도록 리디렉션 할 수 있으므로 예외입니다.

Java API의 꽤 좋은 요약은 다음과 같습니다. 오류 및 예외가 나타내는 것.

오류는 합리적인 애플리케이션이 포착하지 말아야 할 심각한 문제를 나타내는 Throwable의 서브 클래스입니다. 이러한 오류는 대부분 비정상적인 조건입니다. "정상"조건이지만 ThreadDeath 오류는 대부분의 응용 프로그램이이를 잡아 봐야하기 때문에 오류의 서브 클래스입니다.

이 오류는 발생하지 않아야 할 비정상적인 조건이기 때문에 방법을 실행하는 동안 발생할 수있는 오류의 서브 클래스의 서브 클래스의 서브 클래스를 쓰러 뜨릴 필요가 없습니다.

OTOH, 예외를 제외하고 Java API는 말합니다.

클래스 예외와 하위 클래스는 합리적인 응용 프로그램이 잡을 수있는 조건을 나타내는 던지기 가능한 형태입니다.

오류는 주로 응용 프로그램이 실행되는 환경에 의해 발생합니다. 예를 들어, OutofMemoryError는 JVM이 메모리가 부족하거나 스택 오버 플로우가 발생할 때 발생할 때 발생합니다.

예외는 주로 응용 프로그램 자체에 의해 발생합니다. 예를 들어, NullPointerException은 응용 프로그램이 NULL 객체에 액세스하려고 시도하거나 응용 프로그램이 호환되지 않는 클래스 유형을 캐스팅하려고 할 때 발생할 때 발생합니다.

원천 : Java의 오류와 예외의 차이

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top