大二下学期开了java课,在这一节上有点小感想在这里发表一下。
异常处理评判一个程序好坏的标准之一,一个程序由于用户的操作的不可控性、程序的不可预知性,可能产生一些可预知的错误,这些错误就统称为异常。异常在编程中是不可避免的,好的异常处理机制可以使程序变得友好而强壮。所以我们应该对设置异常处理的位置,以及异常处理的原理有透彻的理解。
在老师讲到这一块时说道:无论如何finally语句块里的程序无论如何都会被执行,这时候我就觉得老师这么绝对的说这句话是不是太草率了。i想到了自己看到的一题面试题,就问了一下老师,没想到老师也不是太清楚,最后自己通过Debug求证得到了答案。
这个题目问的是:在try语句块里有return语句,当程序运行到return语句时。程序是否直接return出了函数?还执行finally语句里的代码么?如果执行是在return之前还只在return之后?
测试用代码:
public static int iji(){
try{
System.out.print("Hello try\n");
return 111;
}
finally{
System.out.print("1\n");
System.out.print("finally\n");
}
}
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
int aaaa = 1111;
aaaa++;
System.out.print(iji());
}
运行结果是:
Hello try
1
finally
111
从结果可以看出,程序在执行了打印Hello try 语句之后,又打印了1 和 finally 说明在返回之前就执行了finally语句块内的代码。
之后用Debug跟踪,可以看出在程序执行了打印Hello try之后没有到达return语句而直接跳转到了finally语句块内,这说明程序是先执行了finally内的语句然后才反回值的。
(这时候才发现老师说的也有道理~)
希望对大家有帮助!