第6条:避免使用终结函数

时间:2022-10-17 16:12:14

时间关键的任务不应该由终结函数来完成。

如果你为某个对象定义了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();
				}
			}
		}