public void backendExecute(Map appParams, BackendTaskMetaData metaData) throws Throwable {
try {
PeriodicTaskData ptd = (PeriodicTaskData) appParams.get(PeriodicTaskData.PARAM_KEY);
String bizKey = ptd.getBusinessKey();
} catch (Exception e) {
LogServices.app.error("RPTPeriodicReportGenTask:"+ e.getMessage());
}
}
关于上面的方法,如果指向的对象是null,会遇到NullPointerException
,我想知道是否会将这个异常捕获或抛出给调用者方法?感谢
答案 0 :(得分:1)
Exception
是NullPointerException
的父类,所以它会捕获它而不是将其抛给调用方法。
答案 1 :(得分:1)
当你捕获Exception类并且NullPointerException是它的子类时,异常将被捕获而不被抛出。
答案 2 :(得分:0)
catch (Exception e)
表示这将捕获任何异常(即Exception
的任何子类)抛出前面的try
块 - 其中,是的,包括NullPointerException
。请注意,这通常被认为是一种不好的做法,因为您几乎总是希望以不同的方式处理不同类型的异常,因此需要多个catch
语句。
例如,考虑一个可能在编译时抛出IllegalAccessException
或在运行时抛出NullPointerException
的方法 - 很难想象你想以同样的方式处理它们的情况,所以你通常想做这样的事情:
try {
PeriodicTaskData ptd = (PeriodicTaskData) appParams.get(PeriodicTaskData.PARAM_KEY);
String bizKey = ptd.getBusinessKey();
} catch (NullPointerException e) {
//do something
} catch (IllegalAccessException e) { //for example...
//do something different
}
答案 3 :(得分:0)
NullPointerException
是Exception
的子类,因此会被捕获,但是建议您不要尝试捕获运行时异常。最好避免它们。
例如,可以通过执行以下操作来避免空指针:
if(ptd != null) {
ptd.getBusinessKey();
} else {
//Notify the user in some way or do something else.
}
答案 4 :(得分:0)
关于上述方法,如果对象ptd为null,则会遇到nullpointexception,
是
我想知道这个异常是catch还是把它扔给调用方法?
处理程序会捕获异常。处理程序将捕获Exception
以及从中产生的任何异常。 NullPointerException
是RuntimeException
的子类,它(反过来)是Exception
的子类。因此,它将被捕获。
现在,如果这只是一个说明性的例子......但是坏主意要:
throws Throwable
或Exception
...除非您即将终止该申请。将方法声明为抛出Throwable
使得调用者几乎无法知道可能会抛出哪些异常。相反,编译器会坚持让调用者捕获......或传播Throwable
。
捕获Exception
有一个问题,即您将捕获 Exception
的每个子类型...包括1)您不期望的各种未经检查的异常,以及2)是可能是安全从中恢复的错误症状。