异常输出

2020-02-09 16:03:58来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

异常输出

更新记录

【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
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:抛出异常

下一篇:pagehelper 分页不生效,总页数总是1解决方案