try:对可能出异常的代码进行包裹
catch:当try包裹的代码出现问题时,捕获到对应异常。
(如果进行捕获了,则下面的程序继续执行正常
否则,还是异常)
finally:不管是否出现异常,以及是否捕获,最终一定会执行
try catch finally组合有以下三种
try catch
try catch finally
try finally
以下结合几个案例来分析try catch finally之间的执行顺序
案例一 :try catch finally结构 无异常
@Test
public void Demo1(){
try{
System.out.println("111");
}catch (Exception e){
System.out.println("222");
}finally {
System.out.println("333");
}
}
依次执行try finally结果:
111
333
案例二:try catch finally结构 有异常
@Test
public void Demo2(){
try{
System.out.println("000");
int i = 1/0;
System.out.println("111");
}catch (Exception e){
System.out.println("222");
}finally {
System.out.println("333");
}
}
依次执行 try catch finally
执行try 打印000,往下执行到1/0发现异常,
即执行catch部分 打印222
接着执行finally 打印333 即结果为:
000
222
333
案例三:try finally结构 无异常
@Test
public void Demo3(){
try {
System.out.println("111");
} finally {
System.out.println("222");
}
System.out.println("333");
}
依次输出:
111
222
333
案例四:try finally结构 有异常
@Test
public void Demo4(){
try {
System.out.println("000");
int i = 1/0;
System.out.println("111");
} finally {
System.out.println("222");
}
System.out.println("333");
}
首先执行try语句
输出000
执行1/0 出现异常
(程序本该结束,但此处有finally)
执行finally,输出222 即输出结果为:
000
222
案例五:嵌套异常(1)
public static void method () throws Exception{
try {
throw new Exception();
} finally{
System.out.println("000");
}
}
@Test
public void Demo5(){
try {
method();
System.out.println("111");
} catch (Exception e) {
System.out.println("222");
}
System.out.println("333");
}
从Demo3()方法开始执行,
执行到try中,开始调用method()方法。
在method中执行try语句之间抛出一个异常,
(注:在这里并没有捕获异常)
接着执行method方法的finally,输出000,
method执行结束,回到Demo方法,
由于执行method方法还是个异常方法,
在这里不往下执行,直接被catch捕获到,输出222
该方法已经被捕获,接着往下执行 输出333
即输出结果为:
000
222
333
案例五:嵌套异常(2)
public static void method () throws Exception{
try {
System.out.println("000");
throw new Exception();
}catch (Exception e){
System.out.println("111");
} finally{
System.out.println("222");
}
}
@Test
public void Demo6() {
try {
method();
System.out.println("333");
} catch (Exception e) {
System.out.println("444");
}finally {
System.out.println("555");
}
System.out.println("666");
}
最后一个:我就不分析了,你自己思考下,欢迎大家留言分析
这里我就直接说下结果
000
111
222
333
555
666