finally 블록을 사용하는 이유는 무엇입니까?
내가 알 수있는 한, 다음 코드 스 니펫은 모두 동일한 용도로 사용됩니다. 왜 finally
블록이 있습니까?
코드 A :
try { /* Some code */ }
catch { /* Exception handling code */ }
finally { /* Cleanup code */ }
코드 B :
try { /* Some code */ }
catch { /* Exception handling code */ }
// Cleanup code
- 처리하지 않는 예외가 발생하면 어떻게됩니까? (잡지 않았 으면 좋겠다
Throwable
...) - try 블록 내부에서 돌아 오면 어떻게됩니까?
- catch 블록에서 예외가 발생하면 어떻게됩니까?
finally
블록이 있는지 확인합니다 그러나 당신이 그 블록 (명시 적으로 전체 프로세스를 중단하는 몇 가지 방법을 모듈로),이 실행 얻을 것이다를 종료합니다. 이는 결정 론적 리소스 정리에 중요합니다.
(적어도 Java에서는 아마도 C #에서도)가없는 try
블록 을 가질 수도 catch
있지만 finally
. 예외가 발생했을 때에 try
블록의 코드에서 finally
예외가 높은 곳을 던져 전에 블록이 실행됩니다 :
InputStream in = new FileInputStream("somefile.xyz");
try {
somethingThatMightThrowAnException();
}
finally {
// cleanup here
in.close();
}
try 또는 catch 블록에서 발생하는 일과 관계없이 어쨌든 실행하려는 코드를 넣을 수 있습니다.
또한 다중 catch를 사용하고 있고 모든 catch 블록에 공통적 인 코드를 넣으려면 여기에 넣을 수 있습니다. 그러나 try의 전체 코드가 실행되었는지 확신 할 수 없습니다.
예를 들면 :
conn c1 = new connection();
try {
c1.dosomething();
} catch (ExceptionA exa) {
handleexA();
//c1.close();
} catch (ExceptionB exb) {
handleexB();
//c1.close();
} finally {
c1.close();
}
마지막으로 항상 실행되며, catch 후 코드는 그렇지 않을 수 있습니다.
응용 프로그램이 강제로 닫히더라도 실행해야하는 작업 (메모리 해제, 데이터베이스 닫기, 잠금 해제 등)이있을 것입니다. 이러한 코드 줄을 finally
블록 에 작성 하면 예외가 발생하거나 아니...
응용 프로그램은 스레드 모음 일 수 있으며 스레드를 Exception
종료하지만 전체 응용 프로그램은 아닙니다.이 경우 finally
더 유용합니다.
finally
JVM 실패, 스레드 종료 등과 같은 일부 경우 에는 실행되지 않습니다.
throw 될 수있는 예외에 관계없이 실행하려면 해당 코드가 필요하기 때문입니다. 예를 들어 일부 관리되지 않는 리소스를 정리해야 할 수 있습니다 ( 'using'구문은 try / finally 블록으로 컴파일 됨).
무슨 일이 있어도 코드를 실행하고 싶을 때가있을 수 있습니다. 예외 발생 여부입니다. 그런 다음 finally
.
finally
JVM이 종료되지 않는 한 ALWAYS는 finally
단지 한곳에 정리 코드를 넣는 방법을 제공합니다.
각 catch
블록 에 정리 코드를 넣어야한다면 너무 지루할 것 입니다.
catch 블록에서 예외가 발생하면 나머지 코드는 실행되지 않으므로 finaly 블록을 작성해야합니다.
finally 블록은 파일 닫기, 연결 닫기 등과 같은 "정리"코드를 넣는 데 사용할 수 있습니다.
finally 블록은 프로그램이 종료되면 (System.exit ()를 호출하거나 프로세스를 중단시키는 치명적인 오류를 유발하여) 실행되지 않습니다.
참고URL : https://stackoverflow.com/questions/3421486/why-do-we-use-finally-blocks
'development' 카테고리의 다른 글
더 이상 X-UA-Compatible IE = Edge를 사용하는 이유는 무엇입니까? (0) | 2020.09.24 |
---|---|
자바 스크립트 객체 리터럴 : {a, b, c}는 정확히 무엇입니까? (0) | 2020.09.24 |
JSON 키에 인용 문자열을 사용하는 실용적인 이유가 있습니까? (0) | 2020.09.24 |
HttpWebRequest를 사용하여 양식 데이터 게시 (0) | 2020.09.24 |
VS2012 편집기 탭 색상을 끄는 방법은 무엇입니까? (0) | 2020.09.24 |