关于在try..catch语句中的finally,其中的语句是一定会执行的,即便try语句中出现了异常。
如下的代码,如果不使用finally,try中出现异常后可能执行不了f.close(),因为流必须要关闭,所以使用finally保证流关闭,加上catch语句避免空指针异常
FileInputStream f=null;
try {
f=new FileInputStream("D://");
String s=null;
s.toString();
f.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
if (f!=null) {
try {
f.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
try和finally可以联合使用,没有catch。先执行try,再执行catch,最后执行try中的return。也就是说,即使try里有return,finally里面的代码也会执行。
除非遇到了System.exit(0)才能不执行finally
特殊情况:
int i=100;
try {
return i;
}finally{
i++;
}
最后返回的值却是100,因为必须按从上到下自己执行。反编译的结果:
满足了最后执行finally,执行顺序又是从上到下。