finally子句java中的break语句


  public class FinallyTest {
    static int i=0;
    public static void main(String a[]){
        while(true){
            try{
                i=i+1;
                return;
            }finally{
                i=i+1;
                break;
            }
        }
        System.out.println(i);
    }
}

在上面的代码输出是"2"。我所期望的是什么都不应该印出来。这里的"break"到底是干什么的?请解释。感谢

finally子句更改try子句的"完成原因"。有关详细解释,请参阅JLS 14.20.2-最后执行try-catch,并参阅JLS 14.1语句的正常和突然完成。

这是Java语言中一种奇怪的边缘情况。最佳实践是不要故意更改finally子句中的控制流,因为读者很难理解这种行为。

这是另一个病理学的例子:

// DON'T DO THIS AT HOME kids
public int tricky() {
    try {
        return 1;
    } finally {
        return 2;
    }
}

finally子句中的代码绑定执行。

流程如下:

因此,在try块中将i的值递增到1之后,它会遇到return语句。但是,它最终也阻止了。因此,它执行最后的块和它们的再次,它将i的值递增到2。然后遇到闯入,循环退出。

因此,i = 2的值在末尾。希望水流畅通。

它中断循环并"重写"返回。

  1. 始终执行finally
  2. finally中发生的事情可以覆盖在抛出异常、返回语句之前发生的事情
public static void main(String a[])
{
    while(true) <<< #1
    {
        try
        {
            i=i+1;  <<< #2
            return;
        }
        finally
        {
            i=i+1;  <<< #3
            break;  <<< #4
        }
    }
    System.out.println(i);  <<< #5
}

这就是BlueJ Tracing显示的内容。

相关内容

  • 没有找到相关文章

最新更新