자바 프로그래밍에서final,finalize,finally의 차이점

final:
final은 당신의 구성원, 방법 또는 클래스가 덮어쓰거나 계승될 수 있는지 제어할 수 있습니다. 이러한 특징으로 인해final은 자바에서 불가결한 위치를 가지게 되고 자바를 공부할 때 반드시 알고 파악해야 하는 키워드 중 하나입니다.
파이널 멤버
클래스에서 변수를 정의할 때, 그 앞에final 키워드를 추가합니다. 즉, 이 변수는 초기화되면 바꿀 수 없습니다. 여기서 바꿀 수 없는 의미는 기본 형식에 있어서는 그 값이 변할 수 없고, 대상 변수에 있어서는 그 인용이 변할 수 없습니다.그 초기화는 두 곳에 있을 수 있다. 하나는 정의된 부분이고, 다른 하나는 구조 함수에서, 둘은 하나만 선택할 수 있다.
다음 프로그램은 final의 일반적인 사용법을 간단하게 보여 줍니다.

public class Test{
 final int t = 1; //  
 //  ( )
 final int t;
 public Test(){
  t = 3; //  
}
}
또 하나의 용법은 방법 중의 매개 변수를final로 정의하는 것이다. 기본 유형의 변수에 대해 이렇게 하는 것은 실제적인 의미가 없다. 왜냐하면 기본 유형의 변수는 방법을 호출할 때 값을 전달하기 때문이다. 즉, 당신은 방법에서 이 매개 변수를 변경할 수 있어 호출 문장에 영향을 주지 않지만 대상 변수에 대해서는 매우 실용적이다. 왜냐하면 대상 변수는 전달할 때 인용을 전달하기 때문이다.이렇게 하면 방법에서 대상 변수에 대한 수정도 호출 문장의 대상 변수에 영향을 줄 수 있다. 방법에서 매개 변수로 대상 변수를 바꿀 필요가 없을 때final을 명확하게 사용하면 무의식적인 수정이 호출 방법에 영향을 미치지 않도록 방지할 수 있다.
또한 방법의 내부 클래스는 방법의 변수를 사용할 때 이 변수도 final로 선언해야 사용할 수 있습니다. 아래와 같습니다.

public class Test{
 void print(final String str){
  class InnerTest{
   InnerTest (){
    System.out.println(str);
   }
  }
  InnerTest it=new InnerTest ();
 }
 public static void main(String[] args){
  Test test=new Test();
  test.print("Hello word!!!");
 }
}
final 방법
방법을final로 성명하는 데는 두 가지 이유가 있다. 첫째, 이 방법이 제공하는 기능이 당신의 요구를 충족시키고 확장할 필요가 없다는 것을 알고 있으며, 이러한 계승 클래스에서 이 방법을 덮어쓰는 것도 허락하지 않는다. 그러나 계승은 여전히 이 방법을 계승할 수 있다. 즉, 직접 사용할 수 있다는 것이다.둘째, 컴파일러가 이 방법에 대한 모든 호출을 inline (행내) 호출 메커니즘으로 전환시킬 수 있도록 허용한다. 이 메커니즘은final 방법을 호출할 때 방법 주체를 호출처에 직접 삽입하는 것이지 일반적인 방법 호출을 하는 것이 아니다. 예를 들어 단점 저장, 창고 압축 등이다. 그러면 프로그램의 효율이 향상될 수 있지만, 방법 주체가 매우 방대할 때, 또는 여러 곳에서 이 방법을 호출할 수 있다.그러면 주체 코드를 호출하면 빠르게 팽창하고 효율에 오히려 영향을 줄 수 있으므로final로 방법을 신중하게 정의해야 한다.
final 클래스
final을 클래스에 사용할 때, 하나의 final류는 누구에게도 계승될 수 없기 때문에, 이것은 하나의 계승 나무에서 하나의 잎류이며, 이러한 디자인은 수정이나 확장이 필요 없이 완벽하다고 여겨지기 때문에 꼼꼼히 고려해야 한다.final 클래스의 구성원에 대해final로 정의할 수도 있고,final이 아닐 수도 있습니다.방법에 대해 소속류가final이기 때문에 자연히final형이 된다.너도final 클래스의 방법에final을 추가하는 것을 명확하게 할 수 있지만, 이것은 분명히 의미가 없다.
finally:
finally 키워드는 Java 예외 처리 모델에 대한 가장 좋은 보충입니다.finally 구조는 이상이 있든 없든 코드를 실행합니다.finally를 사용하면 대상의 내부 상태를 유지하고 비메모리 자원을 정리할 수 있습니다.만약 Finally가 없다면, 당신의 코드는 매우 이해하기 어려울 것입니다.예를 들어 다음 코드는 finally를 사용하지 않는 상황에서 비메모리 자원을 방출하기 위해 코드를 작성하는 방법을 설명합니다.

public void writeFile(String filePath, String fileName, String args)
   throws IOException

 {

  FileWriter fw = new FileWriter(filePath + fileName);
  try {

   fw.write(args);
  } catch (IOException e) {
   //1
   fw.close();
   throw e;
  }
//2
  fw.close();
 }

이 코드는 FileWriter object를 만들고 write 방법을 호출합니다.이 방법을 종료하기 전에 자원 빈틈을 피하기 위해 FileWriter object를 닫아야 합니다.이 임무를 완성하기 위해서, 우리는//2에서 close를 호출합니다. 이것은 이 방법의 마지막 문장입니다.그러나try 블록에 이상이 발생하면 어떻게 될까요?이런 상황에서//2곳의close 호출은 영원히 발생하지 않습니다.따라서, 이 이상을 포착하고, 이 이상을 다시 보내기 전에//1에close에 대한 다른 호출을 삽입해야 합니다.이렇게 하면 이 방법을 종료하기 전에 FileWriter object를 닫을 수 있습니다.이렇게 코드를 작성하는 것은 번거롭고 오류가 발생하기 쉽지만,finally가 없는 상황에서는 반드시 없어서는 안 된다.finally가 있으면 앞의 코드는 다음과 같은 형식으로 다시 쓸 수 있습니다.

public void writeFile(String filePath, String fileName, String args)
   throws IOException

 {

  FileWriter fw = new FileWriter(filePath + fileName);
  try {

   fw.write(args);
  } catch (IOException e) {
   throw e;
  } finally {

   fw.close();
  }
 }

finally 블록은close 방법이 항상 실행되는지 확인하고try 블록에서 이상이 발생하든지 말든지.따라서 이 방법을 종료하기 전에close 방법을 사용할 수 있습니다.이렇게 하면 FileWriter object가 닫히고 자원이 누설되지 않았다는 것을 확신할 수 있습니다.
finalize:
Java 언어 규범에 따라 JVM은finalize 함수를 호출하기 전에 이 대상은 도달할 수 없지만 JVM은 이 함수가 반드시 호출될 것이라고 보장하지 않습니다.또한 규범은finalize 함수를 최대 한 번 운행하도록 보장한다.
일반적으로finalize는 제어하기 어렵고 매우 중요한 자원의 방출에 사용된다. 예를 들어 입출력 작업, 데이터 연결 등이다.이러한 자원의 방출은 전체 응용 프로그램에 매우 관건적이다.이런 상황에서 프로그래머는 프로그램 자체 관리(방출 포함)를 통해 이러한 자원을 위주로 하고finalize 함수를 통해 자원을 방출하는 방식을 보조로 하여 이중 보험의 관리 체제를 형성해야 하며finalize에만 의존하여 자원을 방출해서는 안 된다.
총결산
final - 수식자 (키워드) 만약 하나의 클래스가final로 성명된다면, 이것은 새로운 하위 클래스를 파생할 수 없고, 부류로 계승될 수 없다는 것을 의미한다.따라서 한 종류는 abstract로 성명될 수 없을 뿐만 아니라final로 성명될 수 없다.변수나 방법을final로 성명하면 사용 중에 변경되지 않을 수 있습니다.final로 선언된 변수는 선언할 때 초기 값을 지정해야 하며, 이후의 인용에서는 읽을 수 있을 뿐, 수정할 수 없습니다.final로 성명된 방법도 마찬가지로 사용할 수 있을 뿐 다시 불러올 수 없습니다.
 
finally - 이상 처리를 할 때finally 블록을 제공하여 모든 제거 작업을 수행합니다.이상을 던지면, 일치하는catch 자구가 실행되고, 제어는finally 블록에 들어갑니다. 
finalize - 방법명.자바 기술은finalize () 방법을 사용하여 쓰레기 수집기에서 대상을 메모리에서 제거하기 전에 필요한 청소 작업을 할 수 있습니다.이 방법은 쓰레기 수집기가 이 대상이 인용되지 않은 것을 확인할 때 이 대상을 호출합니다.이것은 Object 클래스에 정의되어 있기 때문에 모든 클래스가 그것을 계승한다.하위 클래스 덮어쓰기 () 방법은 시스템 자원을 정리하거나 다른 정리 작업을 수행합니다.finalize () 방법은 쓰레기 수집기가 대상을 삭제하기 전에 이 대상을 호출합니다.

좋은 웹페이지 즐겨찾기