使用try / catch返回语句

时间:2014-02-12 14:43:24

标签: java android return try-catch

我知道对于你们许多人来说,这可能是一个愚蠢的问题,但我正在学习android / java,我仍然有一些概念不清楚。

在这种情况下,我不确定在try / catch块中使用return语句的最佳方法是什么。

这就是我在需要使用它时声明我的方法的方法:

public JSONArray parseXmlResponse(String response) {

        JSONArray addressComp = null;
        JSONObject jsonObject = new JSONObject();

        try {
            jsonObject = new JSONObject(response);
            addressComp = jsonObject.getJSONArray("results").getJSONObject(0).getJSONArray("address_components");
        }catch (JSONException e) {
            e.printStackTrace();
        }
        return addressComp;
    }

据我所知,这里的方法总是返回“addressComp”,即使它是null 但我已经看到其他人会这样做:

public JSONArray parseXmlResponse(String response) {

        JSONArray addressComp = null;
        JSONObject jsonObject = new JSONObject();

        try {
            jsonObject = new JSONObject(response);
            addressComp = jsonObject.getJSONArray("results").getJSONObject(0).getJSONArray("address_components");
            return addressComp;
        }catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }

但这让我有点困惑 通过设置return null这里不会将值设置为null,即使addressComp具有实际值也是如此?

2 个答案:

答案 0 :(得分:3)

  

设置返回null,即使addressComp具有实际值,也不会将值设置为始终为null?

不,一旦它到达第一个return语句,它将return addressComp并且return null行永远不会被执行。如果它会导致问题,请确保检查带有该值的变量的null

修改

JSONArray jArray = parseXmlResponse(someString);
if (jArray != null)
{
     //run some code
}
else
{
    //it's null so run some other code
}

答案 1 :(得分:1)

这些方法实现了基本相同的功能。在第二种方式中,它只会到达退货声明...

return addressComp;

...如果try块中的所有内容都很好并且没有抛出异常。一旦命中,该方法就完成了,不再执行任何代码,因此它不会达到空返回。

但是,如果try块中出现问题,它将捕获,打印堆栈跟踪,然后程序流将通过try catch块,并返回null值。请注意,只要抛出异常,就会运行try块中的NOTHING else。

第二种方法更好一点,因为你至少可以报告问题。如果您使用第一种方式,则需要在继续之前检查返回的值是否为空。