0

我想知道当您在程序中有多个返回时,Java 程序中会返回什么。

private int numberReturner()
{
    if (a) return a;
    else if (b) return b;
    for (int i = 1; i < board.size()-1; i++)
    {
        if (c) return c;
    }
    return d;
}

所以假设 a 为真,(它应该返回 a),但它不会返回 d,因为那是整个程序中的最后一行代码吗?为什么会这样?

对不起,如果我的措辞有点奇怪......

4

6 回答 6

4

一旦遇到任何“return”语句,该方法将退出执行并返回该值。

只有在到达最后一行之前没有遇到其他 return 语句时,该方法才会返回 d。

于 2012-04-23T04:50:40.893 回答
2

通常,遇到的第一个“返回”将是返回的那个。但是如果在 finally 块中遇到了“return”语句,finally 块中的“return”就会被返回。例如

private int m1(){
    try{
        return 1;
    }finally{
        return 2; //this will be returned instead
    }
}
于 2012-04-23T04:54:56.653 回答
1

如果您已经“返回”,那么您将永远不会遇到后续的返回。

于 2012-04-23T04:51:24.393 回答
1

该方法返回 a ,因为 return 语句从当前方法中退出,并且控制流返回到调用该方法的位置。请阅读更多关于 Java 教程中不同分支关键字的信息。http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html

于 2012-04-23T04:52:33.737 回答
1

一旦return执行了一条语句,方法就会结束,如果不是void,则返回返回值。

我只知道这条规则的一个例外,您在finally声明中也有它。举个例子:

public static void main(String[] args) {
    System.out.println(test());
}

private static int test() {
    try {
        return 1;
    } finally {
        return 2;
    }
}

在这种情况下test()返回 2,因为finally这种情况下的语句总是在退出方法之前执行。

于 2012-04-23T04:52:56.117 回答
0

当前执行线程将在第一次遇到return语句时离开方法(此规则的显着例外是try...finally块,一旦return遇到 a,finally{...}块在离开方法之前执行。

于 2012-04-23T04:53:09.433 回答