我做了一些像这样的简单实验:
public static void main(String[] args) {
try {
NullPointerException n = new NullPointerException();
System.out.println(Lists.newArrayList(n.getStackTrace()));
n.printStackTrace();
System.out.println(Lists.newArrayList(n.getStackTrace()));
throw n;
} catch (NullPointerException e) {
e.printStackTrace();
System.out.println(Lists.newArrayList(e.getStackTrace()));
}
}
Run Code Online (Sandbox Code Playgroud)
得到这样的输出:
java.lang.NullPointerException
at MyTest.main(MyTest.java:231)
java.lang.NullPointerException
at MyTest.main(MyTest.java:231)
[MyTest.main(AbstractScannerTest.java:231)]
[MyTest.main(AbstractScannerTest.java:231)]
[MyTest.main(AbstractScannerTest.java:231)]
Run Code Online (Sandbox Code Playgroud)
但是我想知道抛出异常时是否做了什么.这是一个主要的学术问题,但如果异常是API的一部分,并且在提供给实现时可能会或可能不会被抛出,则在某些情况下它可能是相关的.
不,Throwable对象本身不会被throw操作修改;它只是在调用堆栈中向上传递,类似于方法的参数。 Throwable通常被设计为不可变对象并且没有设置器,尽管有些支持修改堆栈跟踪,以便 RPC 或类似框架可以确保包含适当的错误跟踪信息。也就是说,aThrowable是一个像任何其他对象一样的对象,您可以编写一个Throwable具有要在块中调用的变异器方法的类catch,尽管这并不常见。
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |