在异常捕获时,e.printStackTrace()是我们经常遇到的.它究竟print了什么,先从eclipse自带的提示(jdk源码注释)中学习一下:
void java.lang.Throwable.printStackTrace()
Prints this throwable and its backtrace to the standard error stream. This
method prints a stack trace for this Throwable
object on the error
output stream that is the value of the field System.err
. The first
line of output contains the result of the toString()
method for
this object. Remaining lines represent data previously recorded by the method
fillInStackTrace()
. The format of this information depends on the
implementation, but the following example may be regarded as typical:
打印出Throwable对象e的堆栈信息:
首行打印出e.toString()信息,
接着打印通过fillInStackTrace()记录的信息(打印格式由实现Throwable的实现方法决定) 9行是 出现异常的地方
6行调用了9行
3行调用了6行
java.lang.NullPointerException
at MyClass.mash(MyClass.java:9)
at MyClass.crunch(MyClass.java:6)
at MyClass.main(MyClass.java:3)
This example was produced by running the program:
class MyClass {
public static void main(String[] args) {
3 crunch(null);
}
static void crunch(int[] a) {
6 mash(a);
}
static void mash(int[] b) {
9 System.out.println(b[0]);
}
}
The backtrace for a throwable with an initialized, non-null cause should
generally include the backtrace for the cause. The format of this information
depends on the implementation, but the following example may be regarded as
typical:
对于多级异常的抛出,会使用Caused By: 格式来显示异常的由来.
当异常信息含有Cause时,堆栈信息的表示:先列出出现异常的地方,介质一步一步追踪,知道找到最终异常出现的地方.
总结:直接看最后Cause by 语句,即为引起所有异常出现的地方,如本例的最后一个Caused by:为LowLevelException,下面第一个at 即为异常所在的行,本例为30行
HighLevelException: MidLevelException: LowLevelException
at Junk.a(Junk.java:13)
at Junk.main(Junk.java:4)
Caused by: MidLevelException: LowLevelException
at Junk.c(Junk.java:23)
at Junk.b(Junk.java:17)
at Junk.a(Junk.java:11)
... 1 more
Caused by: LowLevelException
at Junk.e(Junk.java:30)
at Junk.d(Junk.java:27)
at Junk.c(Junk.java:21)
... 3 more
Note the presence of lines containing the characters "...".
These lines indicate that the remainder of the stack trace for this exception
matches the indicated number of frames from the bottom of the stack trace of the
exception that was caused by this exception (the "enclosing" exception). This
shorthand can greatly reduce the length of the output in the common case where a
wrapped exception is thrown from same method as the "causative exception" is
caught. The above example was produced by running the program:
...的含义:
public class Junk {
public static void main(String args[]) {
try {
a();
} catch(HighLevelException e) {
e.printStackTrace();
}
}
static void a() throws HighLevelException {
try {
b();
} catch(MidLevelException e) {
throw new HighLevelException(e);
}
}
static void b() throws MidLevelException {
c();
}
static void c() throws MidLevelException {
try {
d();
} catch(LowLevelException e) {
throw new MidLevelException(e);
}
}
static void d() throws LowLevelException {
e();
}
static void e() throws LowLevelException {
throw new LowLevelException();
}
}
class HighLevelException extends Exception {
HighLevelException(Throwable cause) { super(cause); }
}
class MidLevelException extends Exception {
MidLevelException(Throwable cause) { super(cause); }
}
class LowLevelException extends Exception {
}
分享到:
相关推荐
jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u...
unity2021.3 安卓JDK,SDK
JDK动态代理生成字节码,用到了ProxyGenerator.generateProxyClass()方法,这个是rt.jar包中的方法,而安装JDK之后的src.zip没有包含。苦于找不到源码,下载了一个又报错,代码也不全,这里给大家分享一下亲测可用的...
JDK7安装包.zip\JDK7安装包.zip\JDK7安装包.zip\JDK7安装包.zip\JDK7安装包.zip JDK7安装包.zip\JDK7安装包.zip\JDK7安装包.zip\JDK7安装包.zip\JDK7安装包.zip JDK7安装包.zip\JDK7安装包.zip\JDK7安装包.zip\JDK7...
jdk-11.0.8.jdk.zip
jdk8版本下载,用于搭建Linux服务器的java环境。(文件全称:jdk-8u201-linux-x64.tar.gz)
java-jdk1.8-8u361-all-jdk-win-linux 该压缩包中包含jdk1.8-8u361下windows版本和linux版本,其包含快速安装包和对应的jdk压缩包版本,具体内容如下: jdk-8u361-linux-aarch64.rpm jdk-8u361-linux-i586.rpm jdk-8...
jdk1.5.exe jdk1.5 jdk1.5下载
jdk8中文说明文档_CHM.zip jdk1.8文档 jdk1.8说明文档 官方直接翻译
jdk-11.0.19_linux-x64_bin.tar.gz文件 jdk-11.0.19_linux-x64_bin.tar.gz文件 jdk-11.0.19_linux-x64_bin.tar.gz文件 jdk-11.0.19_linux-x64_bin.tar.gz文件 jdk-11.0.19_linux-x64_bin.tar.gz文件 jdk-11.0.19_...
Aspose.Words.jdk.jar!!!! Aspose.Words.jdk.jar !!!!Aspose.Words.jdk.jar!!! Aspose.Words.jdk.jar!!!java转words
jdk1.7.0_80.zip JDK1.7稳定版,jdk1.7.0_80.zip JDK1.7稳定版,jdk1.7.0_80.zip JDK1.7稳定版,jdk1.7.0_80.zip JDK1.7稳定版,jdk1.7.0_80.zip JDK1.7稳定版
jdk-7u17-windows-x64.exe jdk-7u40-linux-arm-vfp-sflt.tar.gz jdk-7u75-linux-arm-vfp-hflt.tar.gz jdk-7u75-linux-x64.tar.gz jdk-7u79-linux-x64.gz jdk-8u40-linux-x64.gz jdk-8u40-windows-x64-8.0.40.25....
arm架构下jdk-11.0.20_linux-aarch64_bin.tar jdk11
jdk-13.0.2.rar jdk13官网下载的, 这里下载更快 jdk-13.0.2.rar jdk13官网下载的, 这里下载更快 jdk-13.0.2.rar jdk13官网下载的, 这里下载更快
由于资源太大 上传不了,故将所有资源放到云盘,文档内有网盘链接,这些jdk都是mac linux安装包 win用户谨慎下载
jdk-11.0.9_windows-x64_bin.zip JDK11 百度云 迅雷 最新 jdk-11.0.9_windows-x64_bin.zip JDK11 百度云 迅雷 最新
m2e 适合 eclipse3.X jdk1.6 (maven2eclipse)
dubbo-admin-2.5.8.war jdk 9 dubbo-admin-2.5.8.war jdk 9 dubbo-admin-2.5.8.war jdk 9
jdk-8u131-linux-i586.tarjdk-8u131-linux-i586.tarjdk-8u131-linux-i586.tarjdk-8u131-linux-i586.tarjdk-8u131-linux-i586.tarjdk-8u131-linux-i586.tarjdk-8u131-linux-i586.tarjdk-8u131-linux-i586.tarjdk-8u...