package exception;
public class test3 {
public static void main(String[] args) {
new test3().t3();
}
void t1() {
int i = 1 / 0;
}
void t2() {
try {
t1();
} catch (Exception e) {
throw new RuntimeException("异常信息2", e);
}
}
void t3() {
try {
t2();
} catch (Exception e) {
throw new RuntimeException("异常信息3", e);
}
}
}
Exception in thread "main" java.lang.RuntimeException: 异常信息3
at exception.test3.t3(test3.java:26)
at exception.test3.main(test3.java:6)
Caused by: java.lang.RuntimeException: 异常信息2
at exception.test3.t2(test3.java:17)
at exception.test3.t3(test3.java:24)
... 1 more
Caused by: java.lang.ArithmeticException: / by zero
at exception.test3.t1(test3.java:10)
at exception.test3.t2(test3.java:15)
... 2 more
顺序是有表-内 最后的才是问题的根源
如果程序没有处理异常,当前线程会有个方法,来有JVM调用处理
java.lang.Thread.dispatchUncaughtException(Throwable) 这个方法是private
package exception;
public class test2 {
public static void main(String[] args) {
System.out.println("11111111111111111111111111111111111111111111111111111111");
System.err.println("2222");
}
}
多次执行程序有的时候222会先打印出来
说out err 这两个流的处理应该是异步的
整个项目的异常处理要统一规划,打印的错误信息要慎重考虑,为了系统上线后可以快速的锁定问题
不建议:又打印日志,有往外抛出异常,这样会有很多重复的异常堆,异常堆会很乱
原则:
具体明确
提早抛出
延迟捕获
目标:
什么出了错?
在哪出的错?
为什么出错?