当前位置:  开发笔记 > 编程语言 > 正文

Java中的try-catch块 - catch代码中的执行语句

如何解决《Java中的try-catch块-catch代码中的执行语句》经验,为你挑选了2个好方法。

我有一个关于Java中catch块中语句执行顺序的问题.当我运行下面的类Test1(见下文)时,我希望首先输出Hi !,然后是e.printStackTrace()的结果; 声明,然后再见!但是,我从来没有得到这个订单.请查看我在下面粘贴的输出.

public class Test1 {

    public static void calculate() {
        try {
             int h = 5/0; 
        } catch (ArithmeticException e) {
            System.out.println("Hi!");
            e.printStackTrace();
        } 
        System.out.println("Bye!");
    }

    public static void main(String[] args) {
        calculate();
    }

}

输出1:

Hi!
Bye!
java.lang.ArithmeticException: / by zero
    at Test1.calculate(Test1.java:6)
    at Test1.main(Test1.java:15)

输出2:

java.lang.ArithmeticException: / by zero
    at Test1.calculate(Test1.java:6)
    at Test1.main(Test1.java:15)
Hi!
Bye!

我有两个问题:

1.)更重要的问题:为什么我总是嗨!再见!即使代码中的mye.printStackTrace()在它们之间,也总是一个接一个地打印出来?

2.)为什么有时我会在Hi!之前输出声明e.printStackTrace(),有时候在Bye之后!?我已经多次运行该程序,我无法理解在什么情况下我得到一个或另一个打印.

谢谢.

我使用的是Java 6和Eclipse(Ganymed).



1> Zach Scriven..:

Exception.printStackTrace()打印到" System.err而" Hi!和" Bye!"打开System.out.如果您在常规控制台上运行程序,它们最终会出现在屏幕上,但订单可能已经完成.如果您通过IDE(例如NetBeans)运行程序,则可能会对流进行颜色编码,以便您轻松区分它们.



2> David Hanak..:

你打印"嗨!" 和"再见!" to System.out(即stdout),同时将堆栈跟踪打印到System.err(即stderr).它们的打印顺序取决于刷新两个缓冲区的时间.

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有