실수로 finally 블록에 return을 넣었다가 값이 이상하게 나와서 한참을 봤네요. 재현해보니까 확실히 재밌는(?) 동작을 합니다.
public int test() {
try {
return 5;
} finally {
return 19;
}
}
이거 돌리면 5가 아니라 19가 나옵니다. 심지어 try 안에서 예외를 던져도 finally의 return이 그걸 그냥 삼켜버려서 예외도 안 올라가더라고요.
try에서 분명 return 5를 했는데 이게 왜 그냥 사라지는 건가요? 자바 스펙상 원래 이런 게 맞는지, 그리고 이런 상황을 어떻게 피해야 하는지 궁금합니다.