java中文件流打开之后会占用资源,在使用完之后要及时将他们关闭。
finally中的语句一定会执行,无论之前的try有没有执行成功。
一个流绑定了一个文件句柄(或网络端口),如果流不关闭,该文件(或端口)将始终处于被锁定(不能读取、写入、删除和重命名)状态,占用大量系统资源却没有释放。(详情请点击这里)
package JavaLearn;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class TryCatch_finallly {
public static void main(String args[]) {
FileInputStream file=null;
try {
//第一个catch负责解决文件找不到的异常。
file=new FileInputStream("E:\\eclipse\\java程序工作空间\\JavaLearn\\src\\JavaLearn\\ErrorException.java");
String s=null;
s.toString();
file.close();//在添加第二个catch之后报错就消失了
//但是当上面的toString操作转到catch之后刘就关闭不了了,这会占用资源,造成浪费。
}
catch(FileNotFoundException e){
e.printStackTrace();
}
catch(IOException e) {
e.printStackTrace();
}
finally {
if(file!=null)
try {
System.out.println("来到了finally");
file.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/*
* 输出:
* 来到了finally
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.toString()" because "s" is null
at JavaLearn.TryCatch_finallly.main(TryCatch_finallly.java:14)
*/
}
在Java中,文件流打开后会占用资源,使用完需及时关闭。因为finally语句一定会执行,若流不关闭,绑定的文件或端口会一直被锁定,无法进行读写、删除和重命名操作,还会占用大量系统资源。
1316

被折叠的 条评论
为什么被折叠?



