IT이야기

Java에서 예외를 발생시키지 않고 try / catch 블록에서 중단하는 방법

cyworld 2021. 4. 6. 21:36
반응형

Java에서 예외를 발생시키지 않고 try / catch 블록에서 어떻게 중단 할 수 있습니까?


예외를 던지지 않고 try / catch 블록의 중간에서 벗어나는 방법이 필요합니다. for 루프에서 break 및 continue와 유사한 것입니다. 이게 가능해?

나는 단순한 catch 핸들러에서 아무것도하지 않는 사용자 정의 예외 ( "BreakContinueException"이라고 명명)를 던지는 것에 대해 이상한 생각을하고 있습니다. 나는 이것이 매우 뒤틀린 것이라고 확신합니다.

그래서, 내가 모르는 간단한 해결책이 있습니까?


이를 수행하는 적절한 방법은 try-catch 블록을 별도의 메서드에 넣어 메서드를 분해하고 return 문을 사용하는 것입니다.

public void someMethod() {
    try {
        ...
        if (condition)
            return;
        ...
    } catch (SomeException e) {
        ...
    }
}

코드에 많은 지역 변수가 포함 break되어있는 경우 Stephen C가 제안한대로 레이블이 지정된 블록에서 a 사용을 고려할 수도 있습니다 .

label: try {
    ...
    if (condition)
        break label;
    ...
} catch (SomeException e) {
    ...
}

break루프 구조에서 또는 breakaioobies 답변에 지정된 레이블 항상 할 수 있습니다 .

public static void main(String[] args) {
    do {
        try {
            // code..
            if (condition)
                break;
            // more code...
        } catch (Exception e) {

        }
    } while (false);
}

다양한 방법 :

  • return
  • break또는 continue루프에있을 때
  • break 레이블이 지정된 문에서 레이블을 지정하려면 (@aioobe의 예 참조)
  • break switch 문에서.

...

  • System.exit() ... 그게 당신이 의미하는 바가 아닐 수도 있습니다.

제 생각에는, "라벨 휴식은"당신이 경우이 작업을 수행하는 가장 자연스러운 (적어도 일그러) 방법입니다 단지 시도 / 캐치 밖으로 싶어. 그러나 Java 구조를 경험 한 적이없는 초보 Java 프로그래머에게는 혼란 스러울 수 있습니다.

그러나 레이블은 모호하지만 제 생각에는 a do ... while (false)를 사용할 수 있도록 코드를 래핑 하는 break것이 더 나쁜 생각입니다. 이것은 초보자뿐만 아니라 노비도 혼동 할 것입니다. 초보자 (그리고 비 노련한 사람!)가 레이블이있는 진술에 대해 배우는 것이 좋습니다.


그건 그렇고, return당신이 finally. 그러나 의미론이 약간 혼란스럽고 독자에게 골칫거리가 될 수 있기 때문에 블록 return에서를 수행하지 않아야합니다 finally.


이를 수행하는 방법에는 여러 가지가 있습니다.

  1. 코드를 새 메서드로 이동하고 여기 return에서

  2. try / catch를 do{}while(false);루프로 감 쌉니다 .


catch 블록의이 샘플에서 카운터 값을 변경하면 블록 동안 중단됩니다.

class TestBreak {
    public static void main(String[] a) {
        int counter = 0;

        while(counter<5) {
            try {
                counter++;
                int x = counter/0;
            }
            catch(Exception e) {
                counter = 1000;    
            }
        }
    }
}k

방법에 대해 return더 존재하는 경우는, 할 것finally


이것은 내가 일반적으로하는 코드입니다.

 try
 {
    ...........
    throw null;//this line just works like a 'break'
    ...........   
  }
  catch (NullReferenceException)
  { 
  }
  catch (System.Exception ex)
  {
      .........
  }

ReferenceURL : https://stackoverflow.com/questions/6534072/how-can-i-break-from-a-try-catch-block-without-throwing-an-exception-in-java

반응형