Java中final,finalize和finally的區別

cassiePython發表於2016-01-19

Java中final,finalize和finally的區別

final

final關鍵字可以用於類,方法,變數前,用來表示該關鍵字修飾的類,方法,變數具有不可變的特性。
(1)final關鍵字用於基本資料型別前:這時表明該關鍵字修飾的變數是一個常量,在定義後該變數的值就不能被修改。
(2)final關鍵字用於方法宣告前:這時意味著該方法時最終方法,只能被呼叫,不能被覆蓋,但是可以被過載。
(3)final關鍵字用於類名前:此時該類被稱為最終類,該類不能被其他類繼承。

對於(1):


對於(2):



對於(3):



finalize

finalize方法來自於java.lang.Object,用於回收資源。
可以為任何一個類新增finalize方法。finalize方法將在垃圾回收器清除物件之前呼叫。
在實際應用中,不要依賴使用該方法回收任何短缺的資源,這是因為很難知道這個方法什麼時候被呼叫。

<span style="font-size:14px;">class People{
	
	final void output(String name){
		System.out.println(name);
	}
}
class Stu extends People{
	
	final void output(String name,int id){//可以被過載
		System.out.println(name);
	}
	public void finalize() throws Throwable{           
        super.finalize();  
        System.out.println("finalize method was called!");
    }
}
public class Main {
	
	public static void main(String[] args){
	}
}</span>

finally

當程式碼丟擲一個異常時,就會終止方法中剩餘程式碼的處理,並退出這個方法的執行。假如我們開啟了一個檔案,但在處理檔案過程中發生異常,這時檔案還沒有被關閉,此時就會產生資源回收問題。對此,java提供了一種好的解決方案,那就是finally子句,finally子句中的語句是一定會被執行的,所以我們只要把前面說的檔案關閉的語句放在finally子句中無論在讀寫檔案中是否遇到異常退出,檔案關閉語句都會執行,保證了資源的合理回收。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

public class Finally {
	void fileWith(){
		InputStream in = null;
		try {
			in = new FileInputStream("wang.txt");
			//其他操作
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}finally{
			try {
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}




相關文章