programing

언제 java.lang을 잡을지.에러?

shortcode 2023. 1. 28. 09:48
반응형

언제 java.lang을 잡을지.에러?

에서 잡으면 요?java.lang.Error용용 프로 ???

일반적으로, 절대.

다만, 특정의 에러를 검출할 필요가 있는 경우가 있습니다.

로드)를 작성하는 「」(서드파티 클래스 로드)를 잡는 할 수 .LinkageError(클래스 정의를 찾을 수 없음, 링크 불만족, 호환되지 않는 클래스 변경).

, 서브 .Error그런 것도 처리해 주셔야 합니다.

그건 그렇고, 회복이 불가능할 것 같진 않은데OutOfMemoryError.

아니요. 응용 프로그램이 다음 줄의 코드를 실행할 수 있는지 확신할 수 없습니다.에 ''가요.OutOfMemoryError신뢰할 수 있는 작업을 할 수 있다는 보장은 없습니다.실행 시간 잡기[예외]를 켜고 [예외]를 체크했지만 에러는 체크하지 않았다.

http://pmd.sourceforge.net/rules/strictexception.html

멀티 스레드 환경에서는 가장 많은 경우 이를 포착해야 합니다.잡으면 로그로 기록하고 어플리케이션 전체를 종료합니다!그렇게 하지 않으면 중요한 부분을 수행하는 일부 스레드는 사용되지 않고 나머지 애플리케이션은 모든 것이 정상이라고 생각할 수 있습니다.그 중에서 많은 원치 않는 상황이 발생할 수 있다.가장 작은 문제 중 하나는 한쪽 스레드가 작동하지 않아 다른 스레드가 몇 가지 예외를 발생시키기 시작하면 문제의 근원을 쉽게 찾을 수 없다는 것입니다.

예를 들어, 보통 루프는 다음과 같습니다.

try {
   while (shouldRun()) {
       doSomething();
   }
}
catch (Throwable t) {
   log(t);
   stop();
   System.exit(1);
}

경우에 따라서는, 다른 에러를 다른 방법으로 처리하고 싶은 경우도 있습니다.예를 들어 Out Of Memory Error에서는, 애플리케이션을 정기적으로 닫을 수 있습니다(일부 메모리를 비우고 나서 계속할 수도 있습니다).그 외의 경우는, 할 수 있는 일이 별로 없습니다.

.java.lang.Error이치노나는 매일 프로그래머가 프로그램에서 무슨 일이 일어났는지 알 수 없다는 것을 지지하며 일한다.

데몬 스레드가 있는 경우 종료되지 않도록 해야 합니다.그렇지 않으면 응용 프로그램이 올바르게 작동합니다.

요.java.lang.Error최고 레벨로.

에러 리스트를 보면, 대부분의 에러가 처리 가능한 것을 알 수 있습니다.예를 들어 a입니다.ZipError

는 '오류'입니다.OutOfMemoryError ★★★★★★★★★★★★★★★★★」NoClassDefFoundError이치

예를 들어 다음과 같습니다.

int length = Integer.parseInt(xyz);
byte[] buffer = new byte[length];

낼 수 OutOfMemoryError그러나 이것은 런타임 문제이며 프로그램을 종료할 이유가 없습니다.

NoClassDefFoundError대부분의 경우 라이브러리가 없거나 다른 Java 버전을 사용하는 경우 발생합니다.프로그램의 옵션인 경우는, 프로그램을 종료하지 말아 주세요.

들 수 요.Throwable에러 메세지가 표시됩니다.

아주 드물게.

스레드의 최상위 레벨에서만 스레드가 소멸된 이유를 나타내는 메시지를 발행하려고 합니다.

이러한 작업을 수행하는 프레임워크에 있는 경우 해당 프레임워크에 맡기십시오.

거의 없다.에러는, 통상, 애플리케이션에서는 아무것도 할 수 없는 문제가 되도록 설계되어 있습니다.유일한 예외는 오류 표시를 처리하는 것일 수 있지만 오류에 따라서는 이마저도 계획대로 진행되지 않을 수 있습니다.

보통 걸리지 않습니다.그것은 발생해서는 안 되는 비정상적인 상태를 나타내고 있기 때문입니다.

클래스의 Java API 사양에서 다음을 수행합니다.

Error는 의 입니다.Throwable이는 합리적인 어플리케이션에서 검출하지 말아야 할 중대한 문제를 나타냅니다.

메서드는 메서드 실행 중에 느려질 수 있지만 검출되지 않는 에러 서브클래스를 슬로우 절에서 선언할 필요가 없습니다.이는 이러한 에러는 발생해서는 안 되는 비정상적인 상태이기 때문입니다.

되어 있는 바와 같이, 「」는, 「 」입니다.Error가능성이 있는 상황에서만 던져집니다.Error응용 프로그램이 수행할 수 있는 기능이 거의 없으며 경우에 따라서는 Java Virtual Machine 자체가 불안정한 상태일 수 있습니다(예: ).

, ,,Error는 의 입니다.Throwable, ''는 '잡는다'는이죠.try-catch꼭 예요. 응용 프로그램이 비정상적인 상태에 있을 것이기 때문입니다.ErrorJVM을 사용합니다.

또한 섹션 11.5에 이 주제에 대한 짧은 섹션이 있습니다. 자바 언어 사양예외 계층, 제2판.

새로운 유닛 테스트 프레임워크를 작성할 수 있을 정도로 정신이 나간 경우 테스트 주자는 java.lang을 잡아야 합니다.테스트 케이스에 의해 느려진 Assertion Error.

그렇지 않으면 다른 답변을 참조하십시오.

또, 에러를 검출했을 경우, 에러를 재투입필요가 있는 경우도 몇개 있습니다.를 들어 ThreadDeath는 절대 탐지해서는 안 됩니다.억제된 환경(애플리케이션 서버 등)에서 탐지하면 큰 문제가 발생할 수 있습니다.

응용 프로그램은 비동기 종료 후 정리해야 하는 경우에만 이 클래스의 인스턴스를 캡처해야 합니다.ThreadDeath가 메서드에 의해 포착된 경우 스레드가 실제로 끊어지도록 스레드를 다시 스라운하는 것이 중요합니다.

아주, 아주 드물게.

아주 구체적으로 알려진 사건 한 건만 그랬을 뿐이에요예를 들어 java.lang 입니다.2개의 독립된 ClassLoader가 같은 DLL을 로드하는 경우 UnsupplicatedLinkError가 발생할 수 있습니다(JAR을 공유 클래스로더로 이동하는 것에 동의합니다).

그러나 대부분의 경우 사용자가 불만을 제기했을 때 무슨 일이 일어나는지 알기 위해 로그가 필요했습니다.사용자에게 메시지 또는 팝업을 표시해야 합니다.사일런트 데드가 아닙니다.

C/C++의 프로그래머라도 오류가 발생하여 종료되기 전에 사람들이 이해하지 못하는 것을 알 수 있습니다(메모리 장애 등).

Android 어플리케이션에서 java.lang을 사용하고 있습니다.Verify Error(확인 오류)사용하고 있는 라이브러리는 오래된 버전의 OS를 탑재한 디바이스에서는 동작하지 않으며, 라이브러리 코드는 이러한 에러를 발생시킵니다.물론 실행 시 OS 버전을 확인함으로써 오류를 피할 수 있었습니다만,

  • 지원되는 가장 오래된 SDK는 나중에 특정 라이브러리에 대해 변경될 수 있습니다.
  • 트라이캐치 오류 블록은 더 큰 폴백 메커니즘의 일부입니다.일부 특정 디바이스는 라이브러리를 지원해야 하지만 예외를 발생시킵니다.폴백 솔루션을 사용하기 위해 Verify Error 및 모든 예외를 검출합니다.

java.block을 잡는 것은 매우 편리합니다.테스트 환경에서 AssertionError...

이상적으로는 오류를 처리하거나 포착하지 않는 것이 좋습니다.다만, 프레임워크나 어플리케이션의 요건에 따라서는, 필요한 경우가 있습니다.메모리를 더 많이 사용하는 DOM 파서를 구현하는 XML 파서 데몬이 있다고 가정합니다.Out Of Memory Error가 발생했을 때 파서 스레드와 같은 요건이 있는 경우, 파서 스레드는 이를 처리하고 응용 프로그램/프레임워크 관리자에게 메시지/메일을 발송해야 합니다.

이상적으로는 Java 어플리케이션에서 에러가 검출되지 않는 것이 이상적입니다.응용 프로그램이 비정상 상태가 되어 캐싱되거나 심각한 잘못된 결과가 나타날 수 있습니다.

어설션이 이루어지는 것을 확인하는 단위 테스트 내에서 오류를 잡는 것이 적절할 수 있습니다.누군가가 어설션을 비활성화하거나 다른 방법으로 어설션을 삭제한 경우 알고 싶은 정보

JVM이 더 이상 예상대로 작동하지 않거나 곧 작동하려고 할 때 오류가 발생합니다.오류가 발견되면 캐치 블록이 실행된다는 보장은 물론 끝까지 실행된다는 보장은 없습니다.

또한 실행 중인 컴퓨터, 현재 메모리 상태에 따라 달라지기 때문에 테스트, 시도 및 최선을 다하는 방법은 없습니다.너는 비참한 결과만 얻을 것이다.

또, 코드의 판독성도 다운그레이드 됩니다.

언급URL : https://stackoverflow.com/questions/352780/when-to-catch-java-lang-error

반응형