자바에서 어떤 목적으로는 키워드를 어떻게 final
, finally
그리고 finalize
성취?
자바에서 어떤 목적으로는 키워드를 어떻게 final
, finally
그리고 finalize
성취?
답변:
final
변수를 "변경 불가능"으로 표시하는 데 사용할 수 있습니다.
private final String name = "foo"; //the reference name can never change
final
또한 메서드를 "재정의 할 수 없음"으로 만들 수 있습니다.
public final String toString() { return "NULL"; }
final
클래스를 "상속 가능"하지 않게 만들 수도 있습니다. 즉, 클래스는 하위 클래스가 될 수 없습니다.
public final class finalClass {...}
public class classNotAllowed extends finalClass {...} // Not allowed
finally
try / catch 문에서 "항상"코드 를 실행 하는 데 사용됩니다.
lock.lock();
try {
//do stuff
} catch (SomeException se) {
//handle se
} finally {
lock.unlock(); //always executed, even if Exception or Error or se
}
Java 7에는 java.io.Closeable 또는 java.lang.AutoCloseable 을 명시 적 또는 암시 적으로 구현하는 리소스를 자동으로 닫는 데 사용할 수 있는 새로운 try with resources 문 이 있습니다.
finalize
객체가 가비지 수집 될 때 호출됩니다. 재정의 할 필요가 거의 없습니다. 예 :
protected void finalize() {
//free resources (e.g. unallocate memory)
super.finalize();
}
Object#finalize()
메소드는 Java 9 ( JDK-8165641 ) 에서 더 이상 사용되지 않습니다 .
final 키워드는 상수를 선언하는 데 사용됩니다.
final int FILE_TYPE = 3;
finally 키워드는 throw 된 예외에 관계없이 실행할 코드 블록을 지정하기 위해 try catch 문에서 사용됩니다.
try
{
//stuff
}
catch(Exception e)
{
//do stuff
}
finally
{
//this is always run
}
마지막으로 (haha) finalize im은 키워드가 확실하지 않지만 Object 클래스 에는 finalize () 함수가 있습니다.
http://allu.wordpress.com/2006/11/08/difference-between-final-finally-and-finalize/
최종 – 상수 선언.
finally – finally 블록은 System.exit (0) 호출을 제외하고 try 블록이 종료 될 때 항상 실행됩니다. 이렇게하면 예기치 않은 예외가 발생하더라도 finally 블록이 실행됩니다. 그러나 마지막으로 예외 처리 이상의 용도로 유용합니다. 프로그래머가 반환, 계속 또는 중단으로 인해 실수로 정리 코드를 우회하는 것을 방지 할 수 있습니다. 정리 코드를 finally 블록에 넣는 것은 예외가 예상되지 않는 경우에도 항상 좋은 방법입니다.
finalize () – 가비지 수집에 도움이되는 메서드입니다. 가비지 수집기에 의해 개체가 삭제되기 전에 호출되어 해당 상태를 정리할 수있는 메서드입니다. 파일 핸들, 소켓, 데이터베이스 연결 등과 같은 비 메모리 리소스를 해제하는 데 사용해서는 안됩니다. Java에는 이러한 리소스가 한정되어 있고 이러한 비 메모리 리소스를 해제하기 위해 가비지 컬렉션이 시작될시기를 알 수 없기 때문입니다. finalize () 메서드를 통해.
Google에서 검색해 보았는데 설명에 대한 설명이 필요하십니까?
final : final은 키워드입니다. final로 해제 된 변수는 한 번만 초기화해야하며 변경할 수 없습니다. final로 선언 된 Java 클래스는 확장 할 수 없습니다. final로 선언 된 메서드는 재정의 할 수 없습니다.
마지막 : 마지막으로 블록입니다. finally 블록은 try 블록이 종료 될 때 항상 실행됩니다. 이렇게하면 예기치 않은 예외가 발생하더라도 finally 블록이 실행됩니다. 그러나 마지막으로 예외 처리 이상의 용도로 유용합니다. 프로그래머가 반환, 계속 또는 중단으로 인해 실수로 정리 코드를 우회하는 것을 방지 할 수 있습니다. 정리 코드를 finally 블록에 넣는 것은 예외가 예상되지 않는 경우에도 항상 좋은 방법입니다.
finalize : finalize는 메서드입니다. 객체가 가비지 수집되기 전에 런타임 시스템은 finalize () 메서드를 호출합니다. 가비지 수집 전에 finalize () 메서드에서 시스템 리소스 릴리스 코드를 작성할 수 있습니다.
1. Final • Final은 클래스, 메서드 및 변수에 대한 제한을 적용하는 데 사용됩니다. • 최종 클래스는 상속 될 수 없으며 최종 메서드는 재정의 될 수 없으며 최종 변수 값은 변경 될 수 없습니다. • 생성자에서 초기화 된 최종 변수가 비어있는 경우를 제외하고 최종 변수는 생성시 초기화됩니다. • Final은 키워드입니다.
2. 마지막 • 마지막은 try 및 catch와 함께 예외 처리에 사용됩니다. • 예외 처리 여부와 관계없이 실행됩니다. •이 블록은 데이터베이스 연결, I / O 리소스와 같은 리소스를 닫는 데 사용됩니다. • 마지막으로 블록입니다.
3. Finalize • Finalize는 정리 처리를 수행하기 위해 적합한 개체를 수집하기 직전에 가비지 수집 스레드에 의해 호출됩니다. • 이것은 객체가 정리를 수행 할 수있는 마지막 기회이지만 finalize ()가 호출 될지 여부가 보장되지 않기 때문에 finalize 호출까지 리소스를 유지하는 것이 좋지 않습니다. • Finalize는 방법입니다.
java에서 final의 의미는 다음과 같습니다. -applied to a variable은 초기화 된 각 변수를 더 이상 수정할 수 없음을 의미합니다.
private final double numer = 12;
이 값을 수정하려고하면 오류가 발생합니다.
-applied to a method는 해당 메서드를 재정의 할 수 없음을 의미합니다.
public final void displayMsg()
{
System.out.println("I'm in Base class - displayMsg()");
}
그러나 final 키워드는 메서드의 재정의를 제한하기 때문에 final 메서드를 상속 할 수 있습니다.
-클래스에 적용됨은 해당 클래스를 확장 할 수 없음을 의미합니다.
class Base
{
public void displayMsg()
{
System.out.println("I'm in Base class - displayMsg()");
}
}
finally의 의미는 다음과 같습니다.
class TestFinallyBlock{
public static void main(String args[]){
try{
int data=25/5;
System.out.println(data);
}
catch(NullPointerException e){System.out.println(e);}
finally{System.out.println("finally block is always executed");}
System.out.println("rest of the code...");
}
}
이 예제에서는 try-catch가 실행되었는지 여부에 관계없이 finally 안에있는 것이 항상 실행됩니다. 마무리의 의미 :
class FinalizeExample{
public void finalize(){System.out.println("finalize called");}
public static void main(String[] args){
FinalizeExample f1=new FinalizeExample();
FinalizeExample f2=new FinalizeExample();
f1=null;
f2=null;
System.gc();
}}
가비지 콜렉터를 호출하기 전에