gpt4 book ai didi

java - 当没有给出 catch block 时,正确的语句顺序应该是什么?

转载 作者:行者123 更新时间:2023-11-30 08:15:12 25 4
gpt4 key购买 nike

我有以下代码片段:-

public class MyProgram { 
public static void throwit(){
throw new RuntimeException();
}

public static void main(String args[]){
try {
System.out.println("Hello world ");
throwit();
System.out.println("Done with try block ");
}
finally {
System.out.println("Finally executing ");
}
}
}

据我所知,一旦程序抛出未被捕获的RuntimeException(在throwit()方法中),就会执行finally block ,程序终止。如果方法不处理异常,则在传播异常之前执行 finally block 。

但是,我得到的输出每次都有不同的顺序我得到的输出:

输出 1:-

        Hello world         Finally executing         Exception in thread "main" java.lang.RuntimeException             at tutorialspoint.A.throwit(A.java:6)             at tutorialspoint.A.main(A.java:13) 

输出 2:-

        Hello world         Exception in thread "main" java.lang.RuntimeException             at tutorialspoint.A.throwit(A.java:6)             at tutorialspoint.A.main(A.java:13)         Finally executing 

最佳答案

你的理解是正确的。首先执行 finally block ,然后传播异常。

第二个输出可能是因为您的程序输出写入了 System.out 并且执行的详细信息写入了 System.err。由于两个流都被重定向到同一个窗口,因此它们的打印顺序可能会在不同的执行中发生变化。

如果将行 System.setErr(System.out); 添加到 main 方法的开头,所有输出(包括错误)都将被写入到 System.out,您将始终看到输出 1 中的顺序。

关于java - 当没有给出 catch block 时,正确的语句顺序应该是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29048145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com