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
루프 구조에서 또는 break
aioobies 답변에 지정된 레이블 로 항상 할 수 있습니다 .
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
.
이를 수행하는 방법에는 여러 가지가 있습니다.
코드를 새 메서드로 이동하고 여기
return
에서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
'IT이야기' 카테고리의 다른 글
bash 함수 반환 값을 테스트하는 적절한 방법 (0) | 2021.04.08 |
---|---|
플래시를 사용하지 않고 선택한 텍스트를 클립 보드에 복사 (0) | 2021.04.06 |
C 함수의 시작 부분에서 (무효) '변수 이름'의 용도 (0) | 2021.04.06 |
Bash의 Vi 명령 줄 편집에서 명령 모드와 삽입 모드를 구별하는 방법 (0) | 2021.04.06 |
foreman은 "started with pid #"줄만 표시하고 다른 것은 표시하지 않습니다. (0) | 2021.04.06 |