java void 리턴 - 컴파일러 오류가없는 여러 개의 return 문
4
Answers
이것에 대해서는, 「Java 언어 스펙」으로 설명합니다.
finally
절이 갑자기 완료되면return
문에서 시작된 제어 전송이 중단 될 수 있습니다.
try
블록의 실행이 정상적으로 완료되면finally
블록이 실행되고 다음과 같은 선택 사항이 있습니다.
finally
블록이 정상적으로 완료되면try
문은 정상적으로 완료됩니다.finally
블록이 이유 S로 인해 갑자기 완료되면try
문은 이유 S로 인해 갑자기 완료됩니다.
try
블록의 실행이 다른 이유로 R에서 갑자기 완료되면finally
블록이 실행되고 다음과 같은 선택 사항이 있습니다.
finally
블록이 정상적으로 완료되면try
문은 이유 R에 따라 갑자기 완료됩니다.finally
블록이 이유 S로 인해 갑자기 완료되면try
문은 이유 S (이유 R이 삭제됨)에 따라 갑자기 완료됩니다.
function 사용법 메소드
이것은 인터뷰 질문이었습니다.
public class Demo {
public static void main(String[] args) {
System.out.println(foo());
}
static String foo() {
try {
return "try ...";
} catch (Exception e) {
return "catch ...";
} finally {
return "finally ..."; //got as result
}
}
}
내 질문은 컴파일 시간 오류가없는 이유입니다. finally
블록에 return 문이 있으면 try
및 catch
블록 대신 finally
에서 반환하도록 바인딩됩니다. -Xlint
옵션을 사용하여이 코드를 컴파일하려고 시도했지만 경고를 표시합니다.
warning: [finally] finally clause cannot complete normally
64 votes
java
기본적으로 다음과 같습니다.
public boolean someMethod(){
if(1 == 1){
return true;
}
return false;
}
경고를 표시하지만 컴파일 오류는 발생하지 않습니다. 컴파일러는 return 문이 실행 되지 않을 때만 오류를 발생시킵니다.
java1
62
try, catch 및 finally 블록에 return 문이 하나만 있기 때문에 코드가 올바르게 작동합니다. try, catch 또는 finally 블록 중 하나에 도달 할 수없는 return 문이 있음을 나타내는 두 개의 return 문을 작성하려고하면 컴파일 오류가 발생합니다.
java2
61
다음을 실행 해보십시오 :
그것은 인쇄 할 것입니다 : 1, 2, 3 그리고 나서 0으로 나눗셈을 던져 예외
public class Demo {
public static void main(String[] args) {
System.out.println(foo());
}
public static String print(int a){
System.out.println(a);
return String.valueOf(a/0);
}
static String foo() {
try {
return print(1);
} catch (Exception e) {
return print(2);
} finally {
return print(3);
}
}
}
java3
60