>  기사  >  Java  >  Java 예외 처리 방법 소개(코드 포함)

Java 예외 처리 방법 소개(코드 포함)

不言
不言앞으로
2019-04-15 09:47:042101검색

이 기사는 Java 예외 처리 방법(코드 포함)을 소개합니다. 필요한 친구가 참고할 수 있기를 바랍니다.

서문: 우리의 일이나 생활에는 항상 다양한 "오류"가 있을 것이고, 다양하고 갑작스러운 "이상"이 있을 것입니다. 아무리 많은 준비와 테스트를 수행하더라도 이러한 이상 현상은 항상 어느 시점에 나타나게 됩니다. 제대로 처리하지 않거나 제때에 처리하지 않으면 다른 새로운 문제로 이어지는 경우가 많습니다. 따라서 우리는 항상 이러한 함정에 주의를 기울여야 하며 완전한 예외 처리 메커니즘을 구축하려면 일련의 "모범 사례"가 필요합니다.

Text

변칙 분류

Java 예외 처리 방법 소개(코드 포함)

우선 여기에 변칙 분류의 구조도를 그렸습니다.

JDK에서 Throwable은 "Error"와 "Exception"으로 구분되는 모든 예외의 상위 클래스입니다. 오류는 OutOfMemoryError와 같이 제어할 수 없는 심각한 오류가 발생했음을 의미합니다. 예외는 두 가지 범주로 나누어집니다. 확인된 예외(check)는 메서드 정의에서 수동으로 try/catch 또는 throw를 수행해야 합니다. 확인되지 않은 예외(uncheck)는 사전에 처리할 필요가 없습니다. 개발자는 이러한 간단한 개념을 숙지해야 합니다. 자세한 설명은 생략하고 예시만 보여드리겠습니다.

try/catch/finally를 다시 이해하세요

예외 처리에 관해 말하자면 여기서는 try/catch/finally를 언급해야 합니다. try는 단독으로 존재할 수 없으며, catch와 짝을 이루거나 finally 또는 동시에 세 가지 모두와 쌍을 이루어야 합니다.
1. 코드 블록 실행: 코드 블록의 실행을 모니터링하고, 해당 예외가 발견되면 catch로 점프하고, finally 블록으로 바로 이동합니다.
2. 코드 블록 잡기: 해당 예외가 발생하면 내부 코드가 실행되어 처리되거나 위로 던져집니다.
3. 마지막으로 코드 블록: 예외 발생 여부와 관계없이 실행되어야 합니다. 일반적으로 리소스 정리, 연결 해제 등에 사용됩니다. 그러나 여기에 있는 코드가 실행되지 않는 몇 가지 상황이 있습니다.

  • 코드 실행 프로세스는 try 코드 블록에 들어가지 않습니다.
  • 코드의 try 코드 블록에 무한 루프, 교착 상태 등이 있습니다.
  • System.exit() 작업은 try 코드 블록에서 실행됩니다.

try/catch/finally 트랩

다음은 tcf를 사용할 때 발생할 수 있는 두 가지 트랩입니다.

Code 1

public class TCFDemo {
    public static void main(String[] args) {
        //11
        System.out.println(returnVal());
    }

    static int returnVal(){
        int a = 1;
        int b = 10;
        try{
            return ++a;
        }finally {
            return ++b;
        }
    }
}

Trap 1: finally에 return 문을 추가하면 try 코드의 반환 값을 덮어쓰게 됩니다. 비즈니스 로직이 복잡하면 여기서 문제가 발생하기 쉬우며 이는 문제 해결에 도움이 되지 않습니다. 오류.

Code 2

public class TCFDemo {
    public static void main(String[] args) {
        Lock lock = new ReentrantLock();
       try{
            //有可能加锁失败
            lock.lock();
            //dost
       }finally {
           lock.unlock();
       }
    }
}

Trap 2: 잠금 메소드는 잠금 시 Uncheck 예외를 던질 수 있으므로 try 코드 블록에 있으면 필연적으로 잠금 해제 메소드가 실행되며 이때 잠금이 성공하지 못합니다. 따라서 IllegalMonitorStateException이 발생하므로 후자의 예외는 이전의 잠금 실패 예외 정보를 덮어쓰게 되므로 잠금 방법을 try 코드 블록 외부로 이동해야 합니다.

Best Practices

그럼, 예외 분류와 try/catch/finally에 대한 주의 사항을 간략하게 소개했습니다. 이제 예외 처리에 관한 "모범 사례"가 무엇인지 요약할 수 있습니다.

  1. 예외를 위쪽으로 throw해야 하는 경우 현재 비즈니스 시나리오에 따라 비즈니스 의미가 있는 예외를 정의해야 하며, 업계에서 정의된 예외나 팀 내에서 정의된 예외를 우선적으로 사용해야 합니다. 예를 들어, 시간 초과되는 원격 서비스 호출을 위해 dubbo를 사용하는 경우 RuntimeException을 직접 발생시키는 대신 DubboTimeoutException이 발생합니다.
  2. 반환값 판단이 복잡해지지 않도록 finally 코드 블록에서는 return 문을 사용하지 마세요.
  3. Exception이 아닌 예외의 특정 하위 클래스를 포착하세요. 이는 처리할 수 없는 JVM에서 발생한 심각한 오류를 포함하여 모든 오류를 포착합니다.
  4. 어떤 예외도 무시하지 마세요(아무 처리도 하지 않고 잡아내세요). 지금은 로직의 정상적인 작동이 영향을 받지 않는다고 보장할 수 있다고 해도 나중에 코드가 어떻게 바뀔지는 아무도 보장할 수 없으므로, 스스로 구멍을 파지 마십시오.
  5. 제어 흐름으로 예외를 사용하지 마세요. 이는 매우 이상한 관행이며 성능에 영향을 미칩니다.
  6. 리소스 정리 및 연결 해제와 같은 작업은 메모리 누수를 방지하기 위해 finally 코드 블록에 배치되어야 합니다. finally 블록에서 처리되는 로직이 상대적으로 크고 모듈식인 경우 이를 도구 메서드 호출로 캡슐화할 수 있으며 코드는 더 간단해질 것입니다.

Ending

작은 이상이지만 대단한 지식, 어떻게 생각하시나요?

위 내용은 Java 예외 처리 방법 소개(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제