|
|
게시됨 2015. 12. 17. 오후 12:34:00
|
|
|

1. 예외가 있든 없든, 최종 블록의 코드는 실행됩니다; 2. try and catch에 return이 있을 때, finally는 여전히 실행됩니다; 3. final은 return(return) 이후 표현식 연산 후에 실행됩니다(이 시점에는 연산 이후의 값은 반환되지 않지만, return할 값이 먼저 저장됩니다. finals의 코드와 상관없이, 이전에 저장된 값이라도 반환값은 변하지 않습니다). 따라서 함수의 반환 값은 최종 실행 전에 결정됩니다; 4. return을 final에 포함하지 않는 것이 최선입니다. 그렇지 않으면 프로그램이 일찍 종료되고, 반환 값은 try 또는 catch에 저장된 반환 값이 아닙니다. 본보기:
상황 1:try{} catch(){}finally{} return;
절차가 순서대로 진행되는 것 같습니다.
상황 2:try{ return; }catch(){} finally{} return;
프로그램은 try 블록에서 return 전에 코드를 실행하며(return 문에 표현식 연산도 포함),
그 다음 마지막 블록을 실행하고, 마지막으로 try에서 반환을 실행합니다;
마지막으로 블록 반환(block return)을 사용하는데, 이는 프로그램이 try에서 반환되어 더 이상 실행되지 않기 때문입니다.
상황 3:try{ } catch(){return; } 마침내{} 돌아오고;
프로그램은 try를 먼저 실행하고, 예외를 만나면 catch 블록을 실행합니다.
예외가 있을 경우, catch에서 return 전(return 문에 포함된 표현식 연산 포함) 코드를 실행한 후 마지막 문에서 모든 코드를 실행합니다.
마지막으로, 캐치 블록에서 리턴을 실행하세요. 마침내 4곳에서 코드가 실행되지 않습니다.
예외는 없습니다: 실행, 시도, 그리고 마지막으로 돌아오세요.
상황 4:try{ return; }catch(){} finally{return; }
프로그램은 try 블록에서 return 전에 코드를 실행하며(return 문에 표현식 연산도 포함),
그 다음 마지막 블록을 실행하세요. 마지막 블록에는 반환이 있으니 일찍 종료하세요.
사례 5:try{} catch(){return; }마침내{return; }
프로그램은 캐치 블록에서 반환 전에 코드를 실행합니다(반환 문에 포함된 표현식 연산 포함);
그 다음 마지막 블록을 실행하세요. 마지막 블록에는 반환이 있으니 일찍 종료하세요.
상황 6:try{ return; }catch(){return; } 마침내{return; }
프로그램은 try 블록에서 return 전에 코드를 실행하며(return 문에 표현식 연산도 포함),
예외가 있습니다: 캐치 블록에서 코드 실행 전에 코드를 실행하는 것(return 문에 포함된 표현식 연산 포함);
그 다음 finally 블록을 실행하세요. finally 블록에는 return이 있어서 조기 종료됩니다.
예외는 없습니다: 마지막 블록을 다시 실행하고, 마지막 블록에 반환이 있기 때문에 일찍 종료하세요.
최종 결론: try나 catch에서 반환 문은 최종 문장 전에 실행되며, 최종적으로 존재한다면
finally에 return 문이 있으면 프로그램은 return할 것이므로, finally in의 return은 반드시 반환됩니다.
컴파일러는 'final'에서 경고 형태로 반환을 구현합니다.
|
이전의:.net은 HttpListener를 사용해 콘텐츠를 듣고, 차단을 방지하기 위해 스레드를 이용해 사용자에게 응답합니다다음:VS2013, 특정 코드 라인에 빠르게 도달할 때, 지름길이 무엇인가요?
|