如下所示测试代码,在test2中会抛出一个null point
private void test() {
try {
test2();
} catch (Exception e) {
e.printStackTrace();
}
}
private void test2() throws Exception {
try {
String str = null;
str.toString();
} catch (Exception e) {
e.printStackTrace();
throw new Exception("test exception" + e);
}
}
程序执行结果如下:
java.lang.NullPointerException
at integrate.test.Test.test2(Test.java:23)
at integrate.test.Test.test(Test.java:13)
at integrate.test.Test.main(Test.java:7)
java.lang.Exception: test exceptionjava.lang.NullPointerException
at integrate.test.Test.test2(Test.java:27)
at integrate.test.Test.test(Test.java:13)
at integrate.test.Test.main(Test.java:7)
通过test2中的e.printStackTrace();可以发现出现空指针的是str.toString();
但是重新抛出一个新异常,在test1中捕获时就只能定位到throw exception的位置了。无法实际定位到内部抛出异常的位置。
即使抛出一个带有throwable的重载方法的exception 也没有用。
这样的话在实际项目中就很难定位到真实错误的地方了
是否有什么好的方法