更新记录

【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

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!