更新记录
【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