최종 : 다형성 스위치 비활성화 ~
변수 수정 : 변수를 변경할 수 없습니다
수정 수정 : 수업은 상속받을 수 없습니다
수정 방법 : 메소드를 다시 작성할 수 없습니다
마지막으로 : 마지막 명령문 블록은 예외 처리에 사용되었습니다
예외가 생성되는지 여부에 관계없이 실행해야합니다 ~~~
자바 코드
공개 최종 클래스 마침내 테스트 {public static void main (string [] args) {try {새 nullpointerexception (); } catch (nullPointerException e) {System.out.println ( "프로그램은 예외를 던집니다"); } 마침내 {system.out.println ( "마지막 명세서 블록이 실행되었습니다"); }}}Java에서 마지막으로 키워드 사용
다른 언어 모델과 비교할 때, 마지막 키워드는 Java Exception Handling 모델에 가장 잘 추가됩니다. 마지막으로 구조를 통해 예외가 발생하는지 여부에 관계없이 코드가 항상 실행할 수 있습니다. 마지막으로 객체의 내부 상태를 유지하고 비 메모리 자원을 정리하는 데 사용하십시오. 마지막으로 코드가 없으면 혼란 스러울 것입니다. 예를 들어, 다음 코드는 최종적으로 사용하지 않고 무료 비 메모리 리소스에 코드를 작성하는 방법을 보여줍니다.
java.net.*; import java.io.*; class가없는 클래스 {public void foo ()는 ioexception {// 모든 무료 포트 서버 소켓에서 소켓 생성 ss = new Serversocket (0); try {소켓 소켓 = ss.accept (); // 여기에서 다른 코드 ...} catch (ioException e) {ss.close (); // 1 던지기 e; } // ... ss.close (); // 2}}이 코드는 소켓을 생성하고 수락 방법을 호출합니다. 이 방법을 종료하기 전에 자원 취약점을 피하려면이 소켓을 닫아야합니다. 이 작업을 수행하기 위해 우리는 // 2에서 Close를 호출합니다. 이는이 방법의 마지막 진술입니다. 그러나 시도 블록에서 예외가 발생하면 어떻게됩니까? 이 경우 // 2의 긴밀한 호출은 결코 일어나지 않습니다. 따라서이 예외를 포착 하고이 예외를 재발행하기 전에 // 1에서 다른 호출을 삽입해야합니다. 이를 통해 방법을 종료하기 전에 소켓이 닫히도록합니다.
이와 같은 코드를 작성하는 것은 번거롭고 오류가 발생하기 쉬운 것이지만 마지막으로 필수적입니다. 불행히도, 최종 메커니즘이없는 언어에서 프로그래머는 이러한 방식으로 코드를 구성하는 것을 잊어 버릴 수 있습니다. Java의 마지막 조항은이 문제를 해결합니다. 마지막으로, 이전 코드는 다음 형식으로 다시 작성할 수 있습니다.
java.net.*; import java.io.*; class withfinally {public void foo2 ()는 ioexception {// 모든 무료 포트 서버 소켓에서 소켓 생성 ss = new Serversocket (0); try {소켓 소켓 = ss.accept (); // 여기에서 다른 코드 ...} 마침내 {ss.close (); }}}마지막으로 블록은 시도 블록 내에서 예외가 발행되는지 여부에 관계없이 가까운 메소드가 항상 실행되도록합니다. 따라서 방법을 종료하기 전에 항상 가까운 방법이 호출되도록합니다. 이렇게하면 소켓이 닫히고 자원이 유출되지 않았 음을 확인할 수 있습니다. 이 방법에서는 다른 캐치 블록이 필요하지 않습니다. 캐치 블록은 소켓을 닫기 위해 첫 번째 예제에서 제공됩니다. 이제 마침내 닫힙니다. 캐치 블록을 제공하는 경우 캐치 블록이 완료된 후 마침내 블록의 코드가 실행됩니다.
최종 블록은 시도 또는 시도/캐치 블록과 함께 사용해야합니다. 또한, 마침내 블록을 실행하지 않고 시도 블록을 종료 할 수 없습니다. 마지막으로 블록이 존재하면 항상 실행됩니다. (이 명령문은 해당 관점에서 정확합니다. 최종 블록을 실행하지 않고 시도 블록을 종료하는 방법이 있습니다. 코드가 System.Exit (0)을 실행하면 응용 프로그램이 최종 실행을 실행하지 않고 종료됩니다. 반면에, 시도 블록 실행 중에 전원을 끄면 마침내 실행되지 않습니다).