首页 > 其他 > 详细

异常输出

时间:2020-02-09 14:31:04      阅读:54      评论:0      收藏:0      [点我收藏+]

更新记录

【1】2020.02.09-11:14

1.完善了文章

正文

在学习异常处理这一章时,我写了一段代码用来模拟异常的发生:

public class exception {
    public static void main(String[] args) {
        int a = 3, b = 0;
        System.out.println("start");
        System.out.println(a/b);
        System.out.println("finish");
    }
}

结果控制台啥都没有输出

查阅资料发现,F11是Debug
而Ctrl + F11才是Run..
真是神奇呢。。

然后顺利的输出了想要的结果:

start
Exception in thread "main" java.lang.ArithmeticException: / by zero
    at exception.main(exception.java:7)                                //对源代码有删减,所以 ‘ 7 ’ 在这里并不准确

接下来就很愉快了,顺利的写完了try...catch 代码块:

public class exception {
    public static void main(String[] args) {
        int a = 3, b = 0;
        System.out.println("start");
        try {
            System.out.println(a/b);
        }
        catch(Exception e) {
            e.printStackTrace();
        }
        System.out.println("finish");
    }
}

然而运行时又有问题出现了:
第一次输出:

start
java.lang.ArithmeticException: / by zero
    at exception.main(exception.java:6)
finish

第二次输出:

start
finish
java.lang.ArithmeticException: / by zero
    at exception.main(exception.java:6)

第三次输出:

start
java.lang.ArithmeticException: / by zero
finish
    at exception.main(exception.java:6)

甚至这样的都出来了:

start
java.lang.ArithmeticException: / by zero
finish  at exception.main(exception.java:6)
start
java.lang.ArithmeticException: / by zerofinish
    at exception.main(exception.java:6)

这是什么操作???
查看\(printStackTrace()\)的实现后发现

printStackTrace()使用了System.err进行输出,与System.out是两个不同的输出流
输出流有缓冲区,所以输出的时间随机。

这样的随机输出造成了很大的麻烦,所以我们要解决它

最简单的一种方式就是为\(printStackTrace()\)指定一个输出流\(System.out\)
e.printStackTrace(System.out);

其他可以使用\(logger,log4j\)

异常输出

原文:https://www.cnblogs.com/zythonc/p/12286597.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!