java - 如何避免在 Java 中有很多 try catch block

标签 java exception-handling

我对 java 和 try catch block 处理异常的想法还很陌生。

这大致就是我要结束的,而且必须有更好的方法:

    try {
        JSONObject jsonObject = new JSONObject(jsonString);
        int aCount = jsonObject.getInt("acount");
        String devTok = jsonObject.getString("dt");
        String qURL = jsonObject.getString("qu");
        try {
            DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
            Key qKey = KeyFactory.createKey("qu", qURL);
            int dsACount = (Integer) datastore.get(qKey).getProperty(kLastKnownANumber);
            //..etc.. more try catch blocks needed
        } catch (EntityNotFoundException e) {
            e.printStackTrace();
        }
    } catch (com.google.appengine.repackaged.org.json.JSONException e) {
        e.printStackTrace();
    }

以同样的方式嵌入了更多的try catch block ,所以最后只有一堆catch block 。还应该如何处理异常,Eclipse 不断要求我用 try catch block 包围或“添加抛出声明”。

有时候我想捕获某些异常,比如如果它找不到一个实体,我想打印类似“找不到实体”的东西,如果JSON字符串不能被解析成一个对象,我想要打印类似“无法解析 JSON”的内容。

(我习惯了 objective-c,其中有失败的委托(delegate)方法,或者该方法返回 null 并且你已经传递了一个指向 [指向] NSError 对象的指针,该对象将被“填充”,是有什么地方可以学习 try-catch 吗?)

最佳答案

如果您所做的只是捕获它们并打印堆栈跟踪而不考虑异常类型,您可以将代码包装在一个大的 try/catch block 中。要节省许多“捕获”,您可以捕获java.lang.Throwable,这是所有异常实现的接口(interface)。如果没有,您可以捕获您正在调用的代码抛出的每种类型的已检查异常,并专门处理它们。

Eclipse 一直要求您这样做,因为如果检查的异常没有被捕获,或者被调用者声明为抛出,Java 代码将不会编译。

+将此评论添加到答案中(感谢 Paul Tomblin):

在生产质量的应用程序中,您将记录跟踪,在您以正确方式处理异常的地方添加一些逻辑,采用备用流程,和/或将其重新包装在另一个异常中并抛出它,等等. 这完全取决于您要解决的特定问题。

关于java - 如何避免在 Java 中有很多 try catch block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6589489/

相关文章:

java - 将 ECQL 从 geotools 转换为 SQL

java - 如何在 JFrame 显示后从其中自动执行任务?

sql - 即使发生错误,TRY CATCH 中的 SELECT 查询也会返回空结果集

python - 有没有办法用 Python Click 自动处理异常?

c# - 使用命令行构建 C#/.NET 时如何设置配置?

c# - "throw"和 "throw ex"之间有区别吗?

java - Eclipse插件: Show window with scrollable text

java - 启动 WSO2 IS 示例 Playground2 时出现问题

java - 如何在Java中提交隐藏了带有生成值的csrf_token登录字段的html登录表单

.net - VB.Net 用户定义异常的例子?