一个关于finnally的执行顺序的特别说明

今天, 读到一段源码,对finally的执行顺序产生了一点疑惑, 源码如下:

public static void test() {
System.out.println("begin");

for( int i = 0; i < 10; i ++ ) {
try{
System.out.println("test " + i);
}finally{
System.out.println("finally " + i );
}
}
System.out.println("end");
}

在test方法中, finally是何时执行的呢?
执行结果是: 在"begin"之后, "end"之前, 执行了10次"finally " + i .
这与我之前对finally的执行顺序有很大差别, 在之前我一直认为finally语句块是方法中最后执行的. 但是对test方法来说, 以前的那种理解明显是一个悖论, 是不成立的.
接下来, 我编写了如下两段代码

public static void test1 () {
System.out.println("begin");
if(true){
try{
System.out.println("try " + "test1");
}finally{
System.out.println("finally " + "test1 ");
}
}
System.out.println("end");
}

public static void test2 () {
System.out.println("begin");
{
try{
System.out.println("try " + "test1");
}finally{
System.out.println("finally " + "test1 ");
}
}
System.out.println("end");
}

在观察了这两段代码的执行结果与最初的test方法的执行结果十分类似, finally语句块都是在"begin"和"end"之间执行的.
由此我得出另一个对finally语句块执行顺序的结论:"[size=large][color=red][b]finally语句块是在该finally语句块上一层语句块的最末执行的[/b][/color][/size]".
test 方法中finally语句块的上一层语句块是for语句块;
test1 方法中finally语句块的上一层语句块是if语句块;
test2 方法中finally语句块的上一层语句块由{}构成的;

特记载于此.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值