java - Java 中带有 try 的 finally 方法

标签 java

类 DaemonThread 扩展线程 {

public void run() {
    System.out.println("Entering run method");

    try {
        System.out.println("In run Method: currentThread() is"
            + Thread.currentThread());

        while (true) {
            try {
                Thread.sleep(500);
            } catch (InterruptedException x) {
                System.out.println("hi");
            }

            // System.out.println("In run method: woke up again");

            finally {
                System.out.println("Leaving run1 Method");
            }
        }
    } finally {
        System.out.println("Leaving run Method");
    }

}

public static void main(String[] args) {
    System.out.println("Entering main Method");

    DaemonThread t = new DaemonThread();
    t.setDaemon(true);
    t.start();

    try {
        Thread.sleep(900);
    } catch (InterruptedException x) {}

    System.out.println("Leaving main method");
}

}

为什么第二个 finally 方法不运行...据我所知,无论条件如何,finally 方法都必须运行..但在这种情况下,只有第一个 finally 方法,为什么第二个 finally 不运行。

最佳答案

println 语句永远不会到达,因为 while(true) 循环永远不会结束!

如果你离开那个循环,那么第二个 finally block 将被执行。

关于java - Java 中带有 try 的 finally 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10680773/

相关文章:

java - 为什么jframe不显示按钮?

java - 使用 google api 读取 google 文本文档时出现问题

java - 如何使用 HSSF 从 Excel 单元格读取字母数字数据?

java - 是否可以通过不同的方法写入同一个文件?

java - 在检查 Spring 中的错误之前,我可以在 BindingResult 中添加值吗?

java - Mapreduce 作业配置文件位置

java - 有效地存储和查询字符串列表

java - 为什么 isAnnotationPresent 在 Java 7 和 Java 8 之间的工作方式不同?

java - 为什么我的java代码中创建了两个内部框架?

java - Swing:垂直堆叠组件,无需 MigLayout