发表于: 2018-02-06 18:22:56

1 761


今日完成

1.把需求文档看完了,感觉问题还比较多。

(1)支付模块的学习。

(2)继续学习项目流程,svn的使用

2.下午听大师兄将讲解多线程。

3.自己梳理一些小的知识点。

(1)try  return finnaly ,看一段代码。

  public static void main(String[] args) {

System.out.println(fun());
   }

public static int fun() {
int x = 1;
       try {
return x++;
       } catch (Exception e) {
return x++;
       } finally {
return x++;
       }

}

}

结果竟然是2,然后出现了一些疑问?

如果在 try 语句块里使用 return 语句,那么 finally 语句块还会执行吗?

如果执行,那么是怎样实现既执行 return 又执行 finally 的呢?

上面的程序输出为什么是2?

在网上看到还有人还问“是先执行return还是先执行finally?”的?

根据已有的知识知道:

return 是可以当作终止语句来用的,我们经常用它来跳出当前方法,并返回一个值给调用方法。然后该方法就结束了,不会执行return下面的语句。

finally :无论try语句发生了什么,无论抛出异常还是正常执行。finally语句都会执行。

那么问题来了。。。。在try语句里使用return后,finally是否还会执行?finally一定会执行的说法是否还成立?如果成立,那么先执行return还是先执行finally?

看一下api对他的解释

从上面的官方说明,我们知道无论try里执行了return语句、break语句、还是continue语句,finally语句块还会继续执行。

验证为什么是2不是3?官方的解释

如果try语句里有return,那么代码的行为如下:

1.如果有返回值,就把返回值保存到局部变量中

2.执行jsr指令跳到finally语句里执行

3.执行完finally语句后,返回之前保存在局部变量表里的值

(2)多个catch语句的情况下,执行哪一个?


try {
//产生一个异常
}catch (IOException e){
e.printStackTrace();
}catch (FileNotFoundException e){
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}finally {


}

结果之后抛出一个。

明日计划

1.学习银行卡支付模块的开发。

2.svn打tag的学习。

遇到问题

暂无。

收获

1.零碎知识点的收集和学习。



返回列表 返回列表
评论

    分享到