Mit*_*ogl 7 java exception try-catch
关于使用try
/的最佳实践,我有一个非常基本的问题catch
.我有一个像这样的简单函数(DAO)
public void addVehicle(Vehicle vehicle) {
em.getTransaction().begin();
em.persist(vehicle);
em.getTransaction().commit();
}
Run Code Online (Sandbox Code Playgroud)
并在Web服务中使用DAO功能:
@WebMethod(operationName = "addVehicle")
public void addVehicle(Vehicle vehicle) {
try {
vehicleDAO.addVehicle(vehicle);
System.out.print("Vehicle added");
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
或者更好地使用try
/ catch
内部DAO函数,如下所示:
public void addVehicle(Vehicle vehicle) {
try {
em.getTransaction().begin();
em.persist(vehicle);
em.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
对此没有完美的规则.
如果在需要时尽早捕获异常,则代码通常更清晰,更简单,但应尽可能晚.
您应该考虑在Exception
发生这种情况时谁必须采取行动,这将决定您catch
是否在方法内(addVehicle)或者您throw
是否调用者必须这样catch
做.
例如:
public void addVehicle(Vehicle vehicle) throws SQLException{
em.getTransaction().begin();
em.persist(vehicle);
em.getTransaction().commit();
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,调用者必须捕获.
进一步只在少数情况下你应该抓住Exception
或者RunTimeException
更好地捕获特定的异常,IOException
而不是Exception
.
在你的代码中的某个地方,你需要一个"最后一道防线"才有意义.catch (Exception ex).
这是处理不应该发生的错误所必需的.
当决定在哪里处理特定类型的异常时,最好的经验法则是停止查看代码的微观细节,退后一步来推理程序的逻辑并考虑以下事项:
话虽这么说,您应该只捕获相当专门的异常,并将该catch(Exception ex)
构造仅作为顶层的最后手段,并且仅在所有其他可能的块之后catch
保留,仅将其保留用于当时您确实无法预测的异常类型写作。(我知道你说这不是这个例子的重点,但既然我们已经讨论了这个问题,我认为应该提及它以使这个答案更加完整。)
归档时间: |
|
查看次数: |
3085 次 |
最近记录: |