java try_catch_finally的执行流程

说说之间对 try catch finally的理解吧。

try 负责执行程序员认为可能有异常的代码块, 那怎么知道程序块里有哪些异常呢?  用catch捕捉,打印。但是一个程序发生异常还得有一些善后工作要做---一些连接要关闭,那就要finally来执行。(注意 catch可选,可多,finally可选,但是两者至少存在一个)

那么 三者的执行流程是怎么样的呢?

上代码

public static int trytest(){

int a=20;
try {

System.out.println("try返回");
return a+=80;
}
catch (Exception e){
System.out.println(e);
}
finally {
System.out.println("finally block");
if (a>50){
System.out.println("finally block a>50:"+a);
return a+1;
}
if (a>10){
System.out.println("finally block a>10:"+a);
return a+2;
}
}
return a+=110;
}

执行结果

try返回
finally block
finally block a>50:100
接到的返回是101

结果分析:  try语句块——finally语句块——try的return——finally的return。(没有trytest()的return)

若将finally语句块内第一个的return注释,  结果还是不变。那流程是try语句块——finally语句块——try的return。 结果如下

finally block
finally block a>50:100
finally block a>10:100
接到的返回是102

若在上例的基础上再将try的return注释。  返回的结果

try返回
finally block
finally block a>10:20
接到的返回是130

执行流程:try语句块——finally语句块——函数return。

若只将 try的return注释,结果是:

try返回
finally block
finally block a>10:20
接到的返回是20

  按照我的理解就是那就

按照代码按行编译,先执行 try的return,再看有没有finally的return。没有就执行函数的return。

猜你喜欢

转载自www.cnblogs.com/smellpawn/p/10816724.html
今日推荐