【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