비교 차트
비교의 근거 | 결정적인 | 마침내 | 마무리 |
---|---|---|---|
기본 | Final은 Java의 "Keyword"및 "access modifier"입니다. | 마지막으로 Java의 "블록"입니다. | Finalize는 Java의 "메소드"입니다. |
응용할 수 있는 | Final은 클래스, 변수 및 메서드에 적용 할 수있는 키워드입니다. | 마지막으로 try 블록과 catch 블록이 항상 연관되어 있습니다. | finalize ()는 객체에 적용 할 수있는 메소드입니다. |
일 | (1) 최종 변수는 일정하게되고 재 할당 할 수 없습니다. (2) 최종 방법은 하위 클래스에 의해 오버라이드 될 수 없다. (3) 최종 수업은 연장 할 수 없습니다. | "finally"블록은 "try"블록에서 사용 된 리소스를 정리합니다. | Finalize 메서드는 파괴되기 전에 개체와 관련된 작업을 정리합니다. |
실행 | 최종 메소드는 호출시 실행됩니다. | "finally"블록은 "try-catch"블록 실행 직후에 실행됩니다. | finalize () 메서드는 객체를 삭제하기 직전에 실행됩니다. |
결승전의 정의
"Final"은 자바의 키워드입니다. 액세스 수정 자입니다. "final"키워드는 클래스, 메소드 및 변수에 적용 할 수 있습니다. 우리가 어떻게 그것들 각각과 함께 작동하는지 봅시다.
최종 변수
- 최종 키워드가 변수에 적용되면 더 이상 수정할 수 없습니다.
- 최종 변수는 선언 될 때 초기화되어야합니다.
- 일반적인 코딩 규칙에서 최종 변수는 대문자로 선언됩니다.
- 최종 변수는 인스턴스별로 메모리를 차지하지 않습니다.
final int FILE_OPEN = 2;
최종 방법
- class에있는 메소드가 final로 선언되면 해당 서브 클래스로 대체 할 수 없습니다.
- 최종 선언 된 작은 메서드는 컴파일러에서 "인라인"으로 만들 수 있으므로 함수 호출의 오버 헤드를 줄이고 성능을 향상시킬 수 있습니다.
- 재정의 된 메서드 호출은 동적으로 확인되지만 메서드가 final로 선언되면 재정의 될 수 없습니다. 따라서 함수 호출은 컴파일 타임에 해결할 수 있습니다.
class A {final void meth () {System.out.println ( "이것은 최종 메소드입니다."); }} class B extends A {void meth () {// Clas B는 클래스 A의 메소드를 상속받지 못합니다. System.out.println ( "무시하지 않습니다"); }}
최종 등급
- 클래스가 final로 선언되면 클래스를 상속 할 수 없습니다.
- 클래스를 final로 선언하면 자동으로 모든 메서드가 final로 선언됩니다.
- 클래스를 "추상"과 "최종"둘 다로 선언 할 수는 없습니다.
final class A {// ...} class B extends A {// 클래스 B는 클래스 A를 상속받을 수 없다 // ...}
마지막 정의
- Java에서 "finally"는 항상 try / catch 블록과 연결된 블록입니다.
- "finally"블록은 try / catch 블록 다음에 실행되고 try / catch 블록 다음의 코드 앞에 실행됩니다.
- "finally"블록은 예외가 발생했는지 여부를 실행합니다.
- 예외가 발생하고 catch 블록이 심지어 그 예외와 일치하면 "finally"블록이 실행됩니다.
- 메소드가 캐치되지 않은 예외 또는 명시 적 return 문을 통해 try / catch 블록 내부에서 호출자에게 반환되면 메서드가 호출자에게 반환되기 직전에 finally 블록이 실행됩니다.
- "finally"블록은 리소스를 정리하거나 "try"블록에서 사용 된 메모리를 해제하는 데 사용됩니다.
- "finally"블록은 선택 사항이지만 try / catch 블록 다음에 finally 블록을 작성하는 것이 좋습니다.
class FinallyExample {//이 메소드는 메소드에서 예외를 throw합니다. static void procA () {try {System.out.println ( "내부 procA"); 새로운 RuntimeException ( "demo") 던짐; } finally {System.out.println ( "procA 's finally"); }} // try 블록 내에서 돌아옵니다. static void procB () {try {System.out.println ( "내부 procB"); 반환; } finally {System.out.println ( "procB 's finally"); }} // try 블록을 정상적으로 실행합니다. static void procC () {try {System.out.println ( "내부 procC"); } finally {System.out.println ( "procC 's finally"); }} public static void main (String args []) {try {procA (); } catch (Exception e) {System.out.println ( "Exception caught"); } procB (); procC (); }} // procA procA의 내부에서 결과를 출력합니다. procB procB 내부에서 잡힌 Exception은 결국 procC procC의 안에 있습니다.
최종 정의의 정의
- Finalize는 객체 클래스의 한 메소드입니다.
- 객체는 파일 핸들과 같은 자바가 아닌 리소스를 보유하고있을 수 있습니다. 파괴되기 전에 해제되어야합니다.
- 이 메소드는 객체를 완전히 파괴하기 전에 가비지 컬렉터에 의해 호출됩니다.
- 이 메서드는 소멸되기 전에 개체에 대한 정리 작업을 수행합니다.
finalize () 메소드의 일반적인 형식은 다음과 같습니다.
protected void finalize () {// 최종화 코드}
finalize 메소드는 protected 클래스로 선언되므로 클래스 외부에서 액세스 할 수 없습니다.
이 메서드는 항상 가비지 수집 전에 호출됩니다.
최종, 최종 및 최종 사이의 주요 차이점
- 키워드 final은 액세스 수정 자이며, 마지막으로 블록이며 finalize는 메소드입니다.
- 키워드 final은 클래스의 클래스, 변수 및 메서드에 적용 할 수 있으며 finally는 예외를 처리하는 데 사용되는 try catch 블록과 관련된 블록이며 finalize는 객체에서만 작동하는 메서드입니다.
- final로 선언 된 변수는 상수가되어 다시 재 할당 할 수 없으므로 final로 선언 된 메서드를 재정의 할 수 없으며 final로 선언 된 클래스는 상속 될 수 없습니다. finally 블록은 try 및 catch 블록에서 사용하는 리소스를 정리하는 데 사용됩니다. finalize 메서드는 객체가 파괴되기 전에 객체가 사용하는 리소스를 정리하는 데 사용됩니다.
결론:
최종, 최종 및 종결은 메소드에 적용 할 때 다른 효과를 갖습니다.