programing

왜 우리는 최종적으로 블록을 사용하는가?

luckcodes 2022. 9. 12. 18:40

왜 우리는 최종적으로 블록을 사용하는가?

제가 알기로는, 아래의 코드 스니펫은 같은 목적을 가지고 있습니다. ?가 있는 거죠?finally록록 같은 ?? ???

코드 A:

try { /* Some code */ }
catch { /* Exception handling code */ }
finally { /* Cleanup code */ }

코드 B:

try { /* Some code */ }
catch { /* Exception handling code */ }
// Cleanup code
  • 잡히지 않길바랍니다.Throwable...)
  • 테스트 블록 안에서 돌아오면 어떻게 되나요?
  • 캐치 블록에서 예외가 발생하면 어떻게 됩니까?

A finallyblock을 지정하면 해당 블록을 어떻게 종료하든(전체 프로세스를 명시적으로 중단하는 몇 가지 방법으로 모듈화) 실행이 됩니다.이는 자원의 결정론적 정리에 중요합니다.

C에서는) "Java", "C#"을 가질 tryblock a catch단, , ,,finally에서 try 내의 , " " "finally블록은 예외가 더 높게 설정되기 전에 실행됩니다.

InputStream in = new FileInputStream("somefile.xyz");
try {
    somethingThatMightThrowAnException();
}
finally {
    // cleanup here
    in.close();
}

실행하려는 코드를 try 또는 catch block에서 무슨 일이 일어나는지 관계없이 입력할 수 있습니다.

또, 복수의 캐치를 사용하고 있는 경우, 모든 캐치 블록에 공통의 코드를 삽입하고 싶은 경우는, 이 장소를 사용해 주세요.다만, 시행중의 코드 전체가 실행되었는지 어떤지는 확신할 수 없습니다.

예를 들어 다음과 같습니다.

conn c1 = new connection();
try {
    c1.dosomething();
} catch (ExceptionA exa) {
    handleexA();
    //c1.close();
} catch (ExceptionB exb) {
    handleexB();
    //c1.close();
} finally {
    c1.close();
}

마지막으로 항상 실행되지만, 캐치 후 코드에서는 실행되지 않을 수 있습니다.

로 닫히는 , 등 가지 을 「메모리 릴리스」에.finally블록은 예외가 발생하는지 여부에 관계없이 실행됩니다...

일 수 .Exception를 종료합니다.이 경우, 「 」는 「 」를 참조해 주세요.finally더 유용합니다.

, 「」라고 하는 경우도 있습니다.finallyJVM jvm j 、 레 j j j j j j j j j 。

왜냐하면 어떤 예외가 발생하더라도 코드를 실행해야 하기 때문입니다.예를 들어 일부 관리되지 않는 리소스를 정리해야 할 수 있습니다('사용' 구성 컴파일을 시도/최종 차단).

아직도 아래로 스크롤하고 있나?여기예요.

이 질문 때문에 좀 힘들었어요.

try
{
 int a=1;
 int b=0;
 int c=a/b;
}
catch(Exception ex)
{
 console.writeline(ex.Message);
}
finally
{
 console.writeline("Finally block");
}
console.writeline("After finally");

위의 시나리오에서는 무엇이 인쇄됩니까?네, 맞췄습니다.

  • ex.메시지--그것이 무엇이든(아마도 0으로 나눗셈을 시도함)

  • 최종 차단

  • 드디어

    try
    {
        int a=1;
        int b=0;
        int c=a/b;
    }
    catch(Exception ex)
    {
        throw(ex);
    }
    finally
    {
        console.writeline("Finally block");
    }
    console.writeline("After finally");
    

이 프린트는 무엇을 인쇄합니까?아무것도 아니예요!catch block이 에러를 발생시켰기 때문에 에러가 발생합니다.

양호한 프로그래밍 구조에서는 이 코드가 다른 레이어에서 처리된다는 점에서 예외가 유입됩니다.그런 경우를 자극하기 위해 이 코드를 사용해 보겠습니다.

try
{    
 try
    {
     int a=1;
     int b=0;
     int c=a/b;
    }
    catch(Exception ex)
    {
     throw(ex);
    }
    finally
    {
     console.writeline("Finally block")
    }
    console.writeline("After finally");
}
catch(Exception ex)
{
 console.writeline(ex.Message);
}

이 경우 출력은 다음과 같습니다.

  • 최종 차단
  • 예.메시지--뭐든지간에.

예외를 포착하여 다른 레이어(Funneling)에 다시 던지면 연속적으로 코드가 실행되지 않습니다.함수 내부의 리턴 동작과 비슷합니다.

이제 캐치 블록 후에 코드에 대한 리소스를 닫지 않는 이유를 알게 되었습니다.마지막으로 블록에 넣어주세요.

어떤 경우에도 코드를 실행하고 싶을 때가 있습니다.예외가 발생하는지 여부입니다.그리고 나서finally.

finallyJVM이 셧다운되지 않는 한 항상 실행됩니다.finally정리 코드를 한 곳에 저장하는 방법만 제공합니다.

정리 코드를 각각에 넣어야 한다면 너무 지루할 것입니다.catch블록.

catch block에서 예외가 발생하면 나머지 코드가 실행되지 않으므로 finaly block을 작성해야 합니다.

마지막으로 java의 block을 사용하여 파일 닫기, 연결 닫기 등과 같은 "filename" 코드를 넣을 수 있습니다.


프로그램이 종료되면(System.exit()을 호출하거나 프로세스를 중단시키는 치명적인 오류를 발생시킴으로써) 마지막 블록은 실행되지 않습니다.

언급URL : https://stackoverflow.com/questions/3421486/why-do-we-use-finally-blocks