오류를 두려워하되 Java로 작성하지 마십시오! Java의 예외 에 대해 이미 몇 가지를 알고 있을 것입니다 . 오늘날에는 적어도 피상적인 지식이 도움이 될 것입니다. 스택 추적에 나타날 때 많은 사람들을 놀라게 하는 Error 클래스와 특수 예외 유형을 분석할 것입니다.

Java의 예외 계층 구조 맨 위에는 두 개의 하위 항목이 있는 Throwable 클래스가 있습니다.

  • 프로그램의 오류를 담당하는 Exception .
  • 오늘의 주인공인 Error 는 JVM의 오류를 담당합니다.
    이것은 아마도 코딩 버그가 아니라 일반적으로 개발자에게 의존하지 않는 문제라는 점을 언급할 가치가 있습니다.

오류 처리 방법

"오류"를 잡을 때 JVM 자체의 문제에 대해 이야기하고 있기 때문에 로깅을 제외하고 catch 블록 에서 어떤 작업도 수행할 수 없습니다 .

로깅이 좋습니다. 런타임 오류가 발생하면 로그를 보고 원인을 확인하고 수정해야 할 사항을 알 수 있습니다.

코드를 작성할 때 어떤 종류의 오류가 발생할지 모르기 때문에 catch 블록 에 특정 유형을 작성하는 것은 의미가 없습니다 . Error 클래스 자체를 사용하는 것도 최선의 해결책이 아닙니다. 이 경우 오류만 잡을 수 있기 때문입니다.

따라서 ErrorException을 모두 잡을 수 있는 Throwable 클래스를 사용하는 것이 좋습니다 . 이것은 실제로 어떻게 보입니까?

다음과 같은 코드를 작성하는 것은 좋지 않습니다.

try {
    // Your code
} catch (OutOfMemoryError outOfMemoryError) {
    // Code to catch OutOfMemoryError
}
다음과 같은 코드를 작성하는 것도 좋지 않습니다.

try {
    // Your code
} catch (Error error) {
    // Code to catch all Errors
}
그러나 다음과 같은 코드는 괜찮습니다.

try {
    // Your code
} catch (Throwable throwable) {
    // Code to catch all Throwables
}

오류를 처리하는 두 번째 옵션은 메서드에 throws 절을 선언한 후 오류를 더 높게 던지는 것입니다. 이 기술은 코드가 이론적으로 오류를 발생시킬 수 있고 코드를 사용할 수 있는 모든 사람이 오류를 적절하게 처리할 수 있도록 미리 경고하려는 경우에 사용됩니다.

일반적인 오류

가장 많이 발생하는 오류 중 일부는 OutOfMemoryErrorStackOverflowError 클래스입니다.

OutOfMemoryError는 프로그램에 개체를 생성할 충분한 메모리가 없고 가비지 수집기가 따라갈 수 없을 때 자주 나타납니다. 결과는 OutOfMemoryError 입니다 .

Java에서는 메모리 누수를 방지하기 위해 개체를 수동으로 삭제할 수 없지만 가비지 수집기를 과도하게 사용하지 않고 힙을 어지럽히지 않도록 쓰레기를 피할 수 있습니다.

예를 들어 다음과 같은 코드는 메모리에 많은 쓰레기를 생성합니다.


while (true) {
    new Object();
}

두 번째로 말씀드리고 싶은 오류는 스택이 오버플로될 때 발생하는 StackOverflowError 입니다. 스택은 주로 지역 변수, 매개변수 및 메서드 호출을 저장하므로 재귀(또는 재귀 메서드 호출)는 이 오류의 매우 일반적인 원인입니다.


public void foo() {
    foo();
}

프로그램 실행 중 문제를 방지하기 위해 최신 IDE는 종종 메서드를 재귀적으로 호출하는 것에 대해 경고합니다.

오류를 발생시키는 프로그램을 고칠 수는 없지만 오류를 발생시키지 않고 프로그램을 중단시키는 코드를 작성할 수 있습니다. 메모리로 무엇을 하는지 살펴보고, 신중하게 개체를 만들고, 메서드를 올바르게 호출하세요. 그렇게 하면 코드에서 문제가 줄어들 것입니다.

오류 유형과 예외 유형의 차이점

오류 예외
catch 블록 에서 수정할 수 없습니다. catch 블록 에서 처리할 수 있습니다.
컴파일 타임에 발생하지 않음 컴파일 타임에 잡힐 수 있음
JVM의 문제 코드 논리의 문제
모든 오류가 선택 취소됨 선택선택 취소

Java에서 예외를 피할 수는 없지만 두려워해서는 안 됩니다. 각 유형이 무엇을 나타내는지 이해하고 이를 처리하는 방법만 알면 됩니다. 오늘은 그게 다야! 또 봐요!