이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 15557|회답: 0

[통신] 반환이 있다면, 최종적으로 실행 순서를 잡으려고 시도해 보세요

[링크 복사]
게시됨 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, 특정 코드 라인에 빠르게 도달할 때, 지름길이 무엇인가요?
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com