如果在Android中没有返回语句返回值

时间:2013-08-04 21:21:32

标签: java android if-statement

显然我在这里缺少一些基本的东西。我有一个函数,在各种if语句的函数中都有返回语句。这样做的好处显然可以辩论,但我遇到了一个我不熟悉的情况。

我通过断点执行了我的程序,发现它正常地返回到return语句。但是,在到达该语句之后,它会跳过函数的其余部分并转到函数底部的return语句并返回坐在那里的值。以下是代码片段,它长达数百行,所以我不想发布整个内容,只是我追踪它的部分:

public Location getBestLocation(Context c){ //the header

else if(gps_enabled && passive_enabled && !network_enabled){
        if(hGPSLast != null && hPassive != null){
            if(hGPSLast.getTime() > hPassive.getTime() && System.currentTimeMillis() - hGPSLast.getTime() < 300000){
                return hGPSLast; 
            }else if(hPassive.getTime() > hGPSLast.getTime() && System.currentTimeMillis() - hPassive.getTime() < 300000){
                return hPassive; 
            }else{
                hGPSBest = getGPSloc(c);
                if(hGPSBest.getTime() == hGPSLast.getTime()){
                    if(hPassive.getTime() > hGPSLast.getTime()){
                        return hPassive; 
                    }else{
                        return hGPSLast; 
                    }
                }else{
                    return hGPSBest; 
                }
            }
        }else if(hGPSLast != null && hPassive == null){
            if(System.currentTimeMillis() - hGPSLast.getTime() <300000){
                return hGPSLast; 
            }else{
                hGPSBest = getGPSloc(c);
                return hGPSBest; 
            }
        }else if(hPassive != null && hGPSLast == null){
            if(System.currentTimeMillis() - hPassive.getTime() < 300000){
                return hPassive; 
            }else{
                hGPSBest = getGPSloc(c);
                if(hGPSBest != null){
                    return hGPSBest;
                }else{
                    return hPassive; 
                }
            }
        }

到达了身体那部分的一个回报,但是然后代码跳到我所拥有的最底部:

    Criteria criteria = new Criteria();
    String best = lm.getBestProvider(criteria, true);
    //since you are using true as the second parameter, you will only get the best of providers which are enabled.
    def = lm.getLastKnownLocation(best);
    return def;

代码返回“def”,我将其定义为一个空白的持有者位置对象,我希望它可以填充在它上面的代码,如果由于某种原因没有达到正文中的返回。我在这里错过了什么?

1 个答案:

答案 0 :(得分:4)

return命令会立即忽略所有剩余的方法代码并退出它所在的当前方法。它将立即返回到调用方法本身的前一个函数。

例如:

if(hPassive.getTime() > hGPSLast.getTime()){
    return hPassive; 
}else{
    return hGPSLast; 
}

可以改写为

if(hPassive.getTime() > hGPSLast.getTime()){
    return hPassive; 
}

return hGPSLast;

该方法将始终返回两者中的任何一个并跳过剩余的代码。