"잡기" 없이 "최종 시도"를 하는 것이 말이 됩니까?
난 이런 코드를 봤어
try
{
db.store(mydata);
}
finally
{
db.cleanup();
}
내 생각에는 말이지…try
가 있어야 합니다.catch
?
왜 이 코드가 이런 식으로 작동할까요?
이 기능은 현재 실행 중인 메서드가 리소스를 적절하게 정리하면서 예외를 계속 발생시키도록 하려는 경우에 유용합니다.다음에, 호출 방식으로부터의 예외를 처리하는 구체적인 예를 나타냅니다.
public void yourOtherMethod() {
try {
yourMethod();
} catch (YourException ex) {
// handle exception
}
}
public void yourMethod() throws YourException {
try {
db.store(mydata);
} finally {
db.cleanup();
}
}
프로그래머가 확실히 하고 싶어서 거기 있는 거야db.cleanup()
try block 내의 코드가 예외를 발생시켜도 호출됩니다.예외는 해당 블록에서 처리되지 않지만 최종 블록이 실행된 후에만 위로 전파됩니다.예외가 없는 경우 마지막 블록도 실행됩니다.
왜 이 코드가 이런 식으로 작동할까요?
코드가 이 수준의 예외를 처리하는 방법을 모르기 때문인 것 같습니다.괜찮습니다.발신자 중 한 명만 해당하면 됩니다.즉, 예외가 최종적으로 처리되는 한입니다.
사용자에게 통지하거나 예외를 기록하거나 다른 전략을 시도해야 하기 때문에 낮은 수준의 코드가 예외에 적절하게 반응하지 못하는 경우가 많습니다.낮은 수준의 코드는 하나의 기능만 수행하며 높은 수준의 의사결정에 대해서는 알지 못합니다.
그러나 코드는 여전히 리소스를 정리할 필요가 있습니다(그렇게 하지 않을 경우 유출되기 때문입니다).따라서 코드에서는finally
예외 발생 여부에 관계없이 항상 발생하도록 합니다.
마지막 블록은 실행 시에도예외가 발생(발신측 코드의 버그에 의한 것일 수 있음),db.cleanup()
콜이 발신됩니다.
이는 과도한 중첩을 방지하기 위해 자주 사용됩니다.
try
{
if (foo) return false;
//bla ...
return true;
}
finally
{
//clean up
}
특히 메서드가 반환되는 지점이 많을 경우 모든 경우에 정리 코드가 호출되므로 가독성이 향상됩니다.
데이터베이스가 닫혀 있는지 확인하기 위해 코드가 이를 수행하고 있습니다.
통상, 이 방법은, 모든 데이타베이스 액세스 코드를 트라이 블록에 넣은 후, 최종 블록에 데이타베이스를 닫는 콜을 발신하는 것입니다.
시도하는 방법은...finally works, 즉 try block의 코드가 실행되고 finally block의 코드가 종료되었을 때 실행됩니다.무슨 일이 있어도.
컴퓨터를 벽에서 꺼내는 것 이외에는,가 드디어 실행됩니다.
즉, 예외가 호출되어 메서드가 실행되는 데 3년이 걸리더라도 최종 블록에 들어가 데이터베이스가 닫힙니다.
try 블록 내의 코드 중 하나가 체크된 예외를 슬로우할 수 있는 경우 메서드시그니처의 throughs 구에 표시해야 합니다.선택되지 않은 예외가 발생하면 메서드에서 버블됩니다.
예외 발생 여부에 관계없이 마지막 블록은 항상 실행됩니다.
언급URL : https://stackoverflow.com/questions/2614473/does-it-make-sense-to-do-try-finally-without-catch
'source' 카테고리의 다른 글
v-model에서 getter setter를 어떻게 사용합니까? (0) | 2022.09.04 |
---|---|
스프링 부트 시 MariaDB에 잘못된 datetime을 삽입하면 null 필드가 아닌 null이 됩니다. (0) | 2022.09.04 |
Java Keystore 툴을 사용하여 Keystore 생성을 자동화하는 방법(사용자 상호 작용 없음) (0) | 2022.09.03 |
Vuetify와 Laravel과 어떻게 결합합니까? (0) | 2022.09.03 |
IntelliJ IDEA를 사용하여 Java 프로젝트에서 Jenkinsfile 구문 강조 표시 (0) | 2022.09.03 |