Java의 Finally 키워드
손질 변수: 변수는 변경할 수 없습니다.
코스메틱 클래스: 클래스는 상속될 수 없습니다.
수식 방법: 방법은 다시 쓸 수 없습니다
finally: 이상 처리의 마지막 문장 블록에 사용
이상이 생기든 안 생기든 실행돼~~
Java 코드
public final class FinallyTest {
public static void main(String[] args) {
try {
throw new NullPointerException();
} catch (NullPointerException e) {
System.out.println(" ");
} finally {
System.out.println(" finally ");
}
}
}
Java에서 finally 키워드 사용다른 언어의 모델에 비해finally 키워드는 자바 이상 처리 모델에 대한 가장 좋은 보충이다.finally 구조는 이상이 있든 없든 코드를 실행합니다.finally를 사용하면 대상의 내부 상태를 유지하고 비메모리 자원을 정리할 수 있습니다.만약 Finally가 없다면, 당신의 코드는 매우 이해하기 어려울 것입니다.예를 들어 다음 코드는 finally를 사용하지 않는 상황에서 비메모리 자원을 방출하기 위해 코드를 어떻게 작성해야 하는지 설명합니다.
import java.net.*;
import java.io.*;
class WithoutFinally
{
public void foo() throws IOException
{
//
ServerSocket ss = new ServerSocket(0);
try
{
Socket socket = ss.accept();
// ...
}
catch (IOException e)
{
ss.close(); //1
throw e;
}
//...
ss.close(); //2
}
}
이 코드는 플러그인을 만들고 accept 방법을 호출합니다.이 방법을 종료하기 전에, 자원의 빈틈을 피하기 위해서 이 플러그인을 닫아야 합니다.이 임무를 완성하기 위해서, 우리는//2에서 close를 호출합니다. 이것은 이 방법의 마지막 문장입니다.그러나try 블록에 이상이 발생하면 어떻게 될까요?이런 상황에서//2곳의close 호출은 영원히 발생하지 않습니다.따라서, 이 이상을 포착하고, 이 이상을 다시 보내기 전에//1에close에 대한 다른 호출을 삽입해야 합니다.이렇게 하면 이 방법을 종료하기 전에 플러그인을 닫을 수 있다.이렇게 코드를 작성하는 것은 번거롭고 오류가 발생하기 쉽지만,finally가 없는 상황에서는 반드시 없어서는 안 된다.불행하게도finally 메커니즘이 없는 언어에서 프로그래머는 이런 방식으로 그들의 코드를 조직하는 것을 잊어버려서 자원의 빈틈을 초래할 수 있다.자바의finally 자구가 이 문제를 해결했다.finally가 있으면 앞의 코드는 다음과 같은 형식으로 다시 쓸 수 있습니다.
import java.net.*;
import java.io.*;
class WithFinally
{
public void foo2() throws IOException
{
//
ServerSocket ss = new ServerSocket(0);
try
{
Socket socket = ss.accept();
// ...
}
finally
{
ss.close();
}
}
}
finally 블록은close 방법이 항상 실행되는지 확인하고try 블록에서 이상이 발생하든지 말든지.따라서 이 방법을 종료하기 전에close 방법을 사용할 수 있습니다.이렇게 하면 플러그인이 닫히고 자원이 누설되지 않았다는 것을 확신할 수 있습니다.이 방법에서catch 블록이 더 이상 필요하지 않습니다.첫 번째 예시에서catch 블록을 제공하는 것은 플러그인을 닫기 위해서입니다. 현재는finally를 통해 닫습니다.만약 캐치 블록을 제공했다면,finally 블록의 코드는catch 블록이 완성된 후에 실행됩니다.finally 블록은try 또는try/catch 블록과 함께 사용해야 합니다.또한,try 블록을 종료하고finally 블록을 실행하지 않을 수 없습니다.만약finally 블록이 존재한다면, 그것은 항상 실행될 것이다.(그런 점에서 볼 때, 이 진술은 모두 정확합니다.try 블록을 실행하지 않고finally 블록을 종료할 수 있는 방법이 있습니다. 코드가try 내부에서 System.exit(0)를 실행하면.문장, 프로그램이 종료되고finally 실행이 실행되지 않습니다.다른 한편, try 블록이 실행되는 동안 전원을 끄면finally도 실행되지 않습니다.)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.