天天看點

第6條:避免使用終結函數

時間關鍵的任務不應該由終結函數來完成。

如果你為某個對象定義了finalize() 方法,JVM 可能不會調用它,因為垃圾回收器不曾釋放過那些對象的記憶體。調用System.gc() 也不會起作用,因為它僅僅是給 JVM 一個建議而不是指令。根據 Java 文檔,finalize() 是一個用于釋放非 Java 資源的方法。但是,JVM 有很大的可能不調用對象的finalize() 方法,是以很難證明使用該方法釋放資源是有效的。是以,你不應當依靠finalize() 來釋放資源。取而代之,你應當明确的清除那些資源或建立一個try...finally 塊(或類似的機制)來實作。

顯式的終止方法通常與try...finally 結構結合起來使用,以確定及時終止。

比如:

FileInputStream in = null;
		
		try {
			in = new FileInputStream("1.txt");
			in.read();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (in != null) {
				try {
					in.close();
					in = null;
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
           

繼續閱讀