对于try-catch-finally的总结为:
当try中的某条语句引发了异常后,程序会立即跳转到catch部分,查找和该异常类型匹配的catch语句并执行catch{}中的所有语句,而位于try中的发生异常语句后面的所有语句(正常语句和会发生异常的语句)都不会执行。当异常没有发生在try中(如下面代码中的在catch块中发生异常的情况),那么该异常将会向上抛出,除了同级的finally语句中的内容会执行外其它的将都不执行,因为当发生异常时首先会寻找包裹这段发生异常的try,如果找到了就查找该try对应的catch语句否则就执行完finally语句后将异常向上抛出。
这里对上面的情况再进行两种情况分析:
1、查找到和该异常匹配的catch语句:执行catch中的所有语句,再执行finally中语句
2、没有查找到和该异常匹配的catch语句:程序会先执行finally中语句,然后立即跳转到上级catch部分,进行查找匹配,如果一直都没有找到匹配的catch语句,会一直抛到JVM进行拦截处理。
小注:
1、finally中的语句一定会执行的,
2、当catch异常的时候,如果异常被前面的catch捕获到,就不可能再被后面的异常捕获到。
3、try和catch可以连用
try和finally可以连用
try-catch-finally可以连用
除此之外便没有什么其他形式可以用到try、catch、finally中的任何一个关键字。
参考代码如下:
package test;
import java.io.IOException;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
try {
throw new java.io.FileNotFoundException();
}catch (IOException e) {
System.out.println("-----IOException");
throw new java.lang.IllegalArgumentException();
}catch(IllegalArgumentException e) {
System.out.println("----IllegalArgumentException");
return;
}catch(Exception e) {
System.out.println("----Exception");
return;
}finally {
System.out.println("-----finally");
}
}
}
/**输出结果如下
-----IOException
-----finally
**/