Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用自定义消息替换Java抛出异常并继续_Java_Exception_Try Catch_Throw - Fatal编程技术网

用自定义消息替换Java抛出异常并继续

用自定义消息替换Java抛出异常并继续,java,exception,try-catch,throw,Java,Exception,Try Catch,Throw,我的Javafor循环在ids()字符串[]数组中检查不同的id,如下所示: BackTest.java ..... for (String id: ids()) { //..do something addResult(result(id)); } ...... if (status != 200) { String error = "No additional error message

我的Java
for循环
ids()字符串[]数组中检查不同的
id
,如下所示:

BackTest.java

.....
    for (String id: ids()) {
         //..do something
         addResult(result(id));
    }
......
     if (status != 200) {
                    String error = "No additional error message received";
                    if (result != null && result instanceof JSONObject) {
                        JSONObject obj = (JSONObject) result;
                        if (obj.containsKey("error")) {
                            error = '"' + (String) obj.get("error") + '"';
                        }
                    }

                    throw new ApiException(
                            "API returned HTTP " + status +
                            "(" + error + ")"
                            );
       }
其中,
addResult()
将结果添加到一些Java
map
。如果
id不存在
,即http
状态=200
然后我抛出一个新异常,如以下代码段所示:

Api.Java

.....
    for (String id: ids()) {
         //..do something
         addResult(result(id));
    }
......
     if (status != 200) {
                    String error = "No additional error message received";
                    if (result != null && result instanceof JSONObject) {
                        JSONObject obj = (JSONObject) result;
                        if (obj.containsKey("error")) {
                            error = '"' + (String) obj.get("error") + '"';
                        }
                    }

                    throw new ApiException(
                            "API returned HTTP " + status +
                            "(" + error + ")"
                            );
       }
现在在我的第一个
for
循环中,如果循环
中的第一个id不存在
,那么我将抛出一个异常,这使得
我的整个过程失败
,并且它无法检查作为id数组一部分的
其他id。如何确保即使在数组中的第一个id上失败,代码也应该继续检查其他id


我可以考虑用try-catch块替换
抛出新异常。举个例子就好了。

您可以像这样处理异常

for(String id : ids()) {
    try {
        addResult(result(id));
    } catch(ApiException e) {
        System.err.println("Oops, something went wrong for ID "+id+"! Here's the stack trace:");
        e.printStackTrace();
    }
}

这将捕获异常,从而阻止其传播超过此点,从而结束循环,并将打印消息和堆栈跟踪。

您可以这样处理异常

for(String id : ids()) {
    try {
        addResult(result(id));
    } catch(ApiException e) {
        System.err.println("Oops, something went wrong for ID "+id+"! Here's the stack trace:");
        e.printStackTrace();
    }
}

这将捕获异常,从而阻止其传播超过此点,从而结束循环,并将打印一条消息和堆栈跟踪。

如果要继续处理列表/数组的其余部分而不引发新异常的开销,然后我将研究如何使用
continue
关键字

continue
关键字是为这种情况设计的。它使程序的执行立即返回到最近循环的开始,并测试其条件。我建议使用以下设置

    for(String id : ids()) {

        //do stuff...

        if(status != 200) {
            //write to data logger, etc...
            continue;
        }

        addResult(result(id));
    }

有些人不喜欢使用
continue
,因为太多的人会产生混乱的代码。但是,如果节省使用,它们可以帮助减少循环中的代码量。

如果您想继续处理列表/数组的其余部分而不引发新异常的开销,那么我会考虑使用
continue
关键字

continue
关键字是为这种情况设计的。它使程序的执行立即返回到最近循环的开始,并测试其条件。我建议使用以下设置

    for(String id : ids()) {

        //do stuff...

        if(status != 200) {
            //write to data logger, etc...
            continue;
        }

        addResult(result(id));
    }

有些人不喜欢使用
continue
,因为太多的人会产生混乱的代码。但是,如果使用得当,它们可以帮助减少循环中的代码量。

您可以捕获异常并使用
try
/
catch
处理它们。这就是你要问的吗?是的,你是对的。所以:
试试{addResult(result(id));}catch(ApiException){e.printStackTrace();}
?不能回答我的问题。因此,
addResult()方法对于循环中的第一个id失败,因此
整个
循环没有得到执行。这是怎么失败的?当我执行addResult()时,它会将我带到
Api.java
,并检查
if(status!=200)
,如我的原始问题所示。然后我把它扔到那里。addResult()调用不在Api.java中。更新我的问题您可以捕获异常并使用
try
/
catch
处理它们。这就是你要问的吗?是的,你是对的。所以:
试试{addResult(result(id));}catch(ApiException){e.printStackTrace();}
?不能回答我的问题。因此,
addResult()方法对于循环中的第一个id失败,因此
整个
循环没有得到执行。这是怎么失败的?当我执行addResult()时,它会将我带到
Api.java
,并检查
if(status!=200)
,如我的原始问题所示。然后我把它扔到那里。addResult()调用不在Api.java.com中。正在更新我的问题