결정적인:
Final은 회원, 방법 또는 클래스를 덮어 쓰거나 상속받을 수 있는지 제어 할 수 있습니다.
클래스에서 변수를 정의 할 때 최종 키워드를 추가하면이 변수가 초기화되면 여기에서 변경할 수없는 의미는 객체 변수에 대한 값이 불변입니다 , 그들의 참조는 더 이상 변경 될 수 없습니다. 초기화는 두 곳에서있을 수 있으며, 하나는 정의이며, 다른 하나는 생성자에서 하나는 둘 중 하나만 선택할 수 있다는 것입니다.
다음 프로그램은 단순히 최종의 일반적인 사용을 보여줍니다.
공개 클래스 테스트 {최종 int t = 1;
또 다른 사용법은 메소드의 매개 변수를 기본 유형의 변수로 정의하는 것입니다. 이는 메소드를 호출 할 때 기본 유형의 변수가 전달되기 때문에 실질적인 의미가 없습니다. 이 매개 변수는 호출 문에 영향을 미치지 않지만 객체 변수가 통과 할 때 참조에 전달되므로 메소드 변수의 수정도 호출 문에 영향을 미칩니다. 메소드의 객체 변수를 메소드의 매개 변수로 변경할 필요가 없으면 Final을 명시 적으로 사용하는 것이 선언되어 의도하지 않은 호출 방법을 수정하고 영향을 미치지 않습니다.
또한 내부 클래스의 메소드에서 매개 변수 변수를 사용할 때이 매개 변수 변수는 다음 코드와 같이 사용하기 전에 최종적으로 선언해야합니다.
공개 클래스 테스트 {void print (final string str) {innertest () {system.out.println (str)} innertest it = new C innertest (); {test = new test (); "Hello Word !!!");
최종 방법 이이 방법을 최종으로 선언하는 두 가지 이유가 있습니다.이 메소드가 제공하는 기능이 요구 사항을 충족하고 확장 할 필요가 없으며이 방법을 덮어 쓸 수 없다는 것입니다. 이 클래스에서 상속 된 수업은 여전히이 방법을 상속받을 수 있습니다. 두 번째는 컴파일러 가이 메소드의 모든 통화를 인라인 (인라인) 호출로 변환 할 수있는 메커니즘입니다. . 브레이크 포인트 저장, 누르기 스택 등과 같은 경우, 방법 본문이 매우 커지 거나이 방법을 여러 장소로 호출 할 수 있습니다. 따라서 최종을 사용하여 메소드를주의해서 정의해야합니다.
최종 클래스 수업에서 Final을 사용하면 최종 클래스를 상속받을 수 없기 때문에 신중하게 생각해야합니다. 즉,이 클래스는 상속 트리의 리프 클래스 이며이 클래스는 디자인이 완벽한 것으로 간주되었습니다. 수정 또는 확장. 최종 클래스의 멤버의 경우 최종적이거나 최종적이지 않은 것으로 정의 할 수 있습니다. 방법의 경우, 클래스는 Final에 속하기 때문에 자연스럽게 최종가됩니다. 또한 최종 클래스의 메소드에 최종 결승을 명시 적으로 추가 할 수 있지만 이것은 분명히 의미가 없습니다.
마지막으로:
마지막으로 키워드는 Java Exception Handling 모델에 가장 좋은 추가 기능입니다. 마지막으로 구조를 통해 예외가 발생하는지 여부에 관계없이 코드가 항상 실행할 수 있습니다. 마지막으로 객체의 내부 상태를 유지하고 비 메모리 자원을 정리하는 데 사용하십시오. 마지막으로 코드가 없으면 혼란 스러울 것입니다. 예를 들어, 다음 코드는 최종적으로 사용하지 않고 무료 비 메모리 리소스에 코드를 작성하는 방법을 보여줍니다.
public void writefile (String Filepath, String Filename, String Args)은 ioexception {filepath + filename {fw.wr item (args); ();
이 코드는 filewriter 객체를 생성하고 쓰기 메소드를 호출합니다. 메소드를 종료하기 전에 자원 취약점을 피하려면 FileWriter 객체를 닫아야합니다. 이 작업을 수행하기 위해 우리는 // 2에서 Close를 호출합니다. 이는이 방법의 마지막 진술입니다. 그러나 시도 블록에서 예외가 발생하면 어떻게됩니까? 이 경우 // 2의 긴밀한 호출은 결코 일어나지 않습니다. 따라서이 예외를 포착 하고이 예외를 재발행하기 전에 // 1에서 다른 호출을 삽입해야합니다. 이렇게하면 메소드를 종료하기 전에 Filewriter 객체가 닫히도록합니다. 이와 같은 코드를 작성하는 것은 번거롭고 오류가 발생하기 쉬운 것이지만 마지막으로 필수적입니다. 마지막으로, 이전 코드는 다음 형식으로 다시 작성할 수 있습니다.
공개 void writefile (String Filepath, String Filename, String Args)은 ioException {filepath + filename {fw.wr item (args); fw .close ()};
마지막으로 블록은 시도 블록 내에서 예외가 발행되는지 여부에 관계없이 가까운 메소드가 항상 실행되도록합니다. 따라서 방법을 종료하기 전에 항상 가까운 방법이 호출되도록합니다. 이렇게하면 filewriter 객체가 닫히고 자원이 유출되지 않았 음을 확인할 수 있습니다.
마무리 :
Java Language Specification에 따르면, JVM은 최종 기능을 호출하기 전에이 객체를 연락 할 수 없도록 보장하지만 JVM 은이 기능이 호출 될 것이라고 보장하지 않습니다. 또한 사양은 또한 최종 기능이 최대 한 번에 실행되도록합니다.
일반적으로 Finalize는 제어하기 쉽고 일부 I/O 운영 및 데이터 연결과 같이 매우 중요하지 않은 일부 리소스를 해제하는 데 사용됩니다. 이러한 리소스의 출시는 전체 응용 프로그램에 매우 중요합니다. 이 경우 프로그래머는 주로 프로그램 자체를 통해 이러한 리소스를 관리하고 (출시 포함) 주로 자원을 릴리스하기 위해 마무리하는 데 의존하는 대신 이중 보험 관리 메커니즘을 형성하기위한 보충제로서 자원을 공개하는 방법을 보충해야합니다.
요약
최종 - 수정 자 (키워드) 클래스가 최종적으로 선언되면 새 하위 클래스를 도출 할 수 없으며 부모 클래스로 상속받을 수 없음을 의미합니다. 따라서 수업은 추상과 최종으로 선언 될 수 없습니다. 변수 또는 방법을 최종으로 선언하면 사용 중에 변경되지 않도록 할 수 있습니다. 최종으로 선언 된 변수는 선언시 초기 값을 가져야하며 향후 참조로만 읽을 수 있으며 수정할 수 없습니다. 최종으로 선언 된 메소드는 또한 만 사용할 수 있으며 과부하 할 수 없습니다.
마지막으로 - 예외가 처리 될 때 청산 작업을 수행하기위한 최종 블록이 제공됩니다. 예외가 발생하면 일치하는 캐치 조항이 실행되고 컨트롤이 최종 블록 (있는 경우)에 들어갑니다.
마무리 - 메소드 이름. Java 기술을 사용하면 최종화 () 메소드를 사용하여 쓰레기 수집기가 메모리에서 물체를 제거하기 전에 필요한 청소 작업을 수행 할 수 있습니다. 이 방법은 객체가 참조되지 않는 것을 결정할 때 쓰레기 수집기에 의해 호출됩니다. 객체 클래스에 정의되므로 모든 클래스가 상속됩니다. 서브 클래스는 시스템 리소스를 구성하거나 다른 청소 작업을 수행하기 위해 Finalize () 메소드를 대체합니다. 가비지 수집기가 삭제하기 전에 최종화 () 메소드가 호출됩니다.