说说之间对 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。
原文:https://www.cnblogs.com/smellpawn/p/10816724.html