我知道对于你们许多人来说,这可能是一个愚蠢的问题,但我正在学习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具有实际值也是如此?
答案 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。
第二种方法更好一点,因为你至少可以报告问题。如果您使用第一种方式,则需要在继续之前检查返回的值是否为空。