Java异常的报警它是一个堆栈报出的过程。
着重注意它的异常类型,以及报错是在第几行。
其次对于异常,如果你写了try catch ,此时如果没有抛出异常的话,就会默认被内部处理,流程正常走又不报错,你就得不到你想要的数据了。
try {
System.out.println(1/0);
} catch (final Exception e) {
log.error("ERROR", "Error found: ", e);
log.error("ERROR", "Error found: " + e.getMessage());
}
它的结果是:
2018-11-09 11:46:34,834 main ERROR com.lewis.test.TestLewis - Message: ERROR; Description: Error found:
java.lang.ArithmeticException: / by zero
at com.lewis.test.TestLewis.main(TestLewis.java:46)
2018-11-09 11:46:34,837 main ERROR com.lewis.test.TestLewis - Message: ERROR; Description: Error found: / by zer
第一个打印了完整的堆栈信息
第二个只是打印出了异常的具体信息,既没有异常类名,也没有堆栈信息。
实际上异常抛出的一大堆信息是堆栈在存取的
每行信息,每个caused by都是一个堆栈
我们可以通过
StackTraceElement[] stackTraceElements=e.getStackTrace();
获取这整个完整的堆栈信息。
然后
stackTraceElements[0].toString()
这就是第0行的数据,一般就是那个第几行第几行出了问题的那个
你可以自己想返回几行就返回几行。
异常出现的时候,不抛出,程序就默认内部处理了。因此记得写 throws Exception
throwable 和 exception 的区别
在 Java 编程中,Throwable 和 Exception 都是与错误和异常处理相关的类,但它们在一些方面有不同的作用和用法。
Throwable:
Throwable 是 Java 中所有错误和异常的基类。它分为两个主要子类:Error 和 Exception。
Error 表示严重的问题,通常是由于虚拟机无法恢复的问题,比如 OutOfMemoryError、StackOverflowError 等。
Exception 表示可以被程序处理的异常情况,它又分为可检查异常(checked exceptions)和不可检查异常(unchecked exceptions)。
Exception:
Exception 是 Throwable 的一个子类,它表示程序在正常运行过程中遇到的可处理的异常情况。
可检查异常(checked exceptions)是指在方法签名中声明并强制要求调用方进行处理的异常,比如 IOException、SQLException 等。
不可检查异常(unchecked exceptions)是指继承自 RuntimeException 的异常,通常表示程序逻辑错误或运行时错误,例如 NullPointerException、ArrayIndexOutOfBoundsException 等。这些异常通常不需要在方法签名中显式声明或捕获。
总的来说,Throwable 是异常和错误的根类,Exception 是可以被程序处理的异常类,而 Error 则表示虚拟机无法恢复的严重问题。Exception 又分为可检查异常和不可检查异常。通常,你应该在你的程序中通过合适的异常处理机制来捕获和处理 Exception 类的子类,特别是可检查异常,以提高代码的健壮性和可维护性。