10

我提取了某人的 APK(Android 应用程序)来查看 Java 源代码,并看到了很多return;代码,甚至在void方法上也是如此。

例如:

public void doSomething(){
do{
    return; //This line makes the code below unreachable and can't compile in Eclipse
    switch(num){
        ...
        default:
            return;
    }
}while(...)
...
}

为什么应用程序在我的手机上运行良好?

我想return;这就像打破方法的捷径。是对的吗?

4

4 回答 4

23

如果该方法返回 void 则return;只是在该语句处退出该方法,而不运行以下语句。

于 2013-03-04T03:52:19.503 回答
11

对,那是正确的。查看http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html的底部:

退货声明

最后一个分支语句是返回语句。return 语句从当前方法中退出,控制流返回到调用方法的地方。return 语句有两种形式:一种返回值,另一种不返回。要返回一个值,只需将值(或计算该值的表达式)放在 return 关键字之后。

返回++计数;返回值的数据类型必须与方法声明的返回值的类型相匹配。当一个方法被声明为 void 时,使用不返回值的 return 形式。

返回;

于 2013-03-04T03:48:41.420 回答
3

回答你的第一个问题:我假设这段代码是反编译的。请注意,反编译器不是二进制 dex 代码与用于生成这些二进制文件的任何 Java 代码的一对一转换器。他们经常在解析不同的控制结构(如循环和开关)时遇到问题。此外,二进制文件可能会被混淆,这意味着在编译后二进制文件被修改为完全可操作,但更难反编译和逆向工程(基本上是为了防止你在这里尝试做的事情:))。他们可以添加死代码,例如不应该存在的 return 语句、mangle 循环和 if 语句来混淆反编译的代码等。

于 2013-03-04T04:01:41.717 回答
1

return 关键字基本上用在 void 方法中,它有助于打破条件语句以脱离方法。

于 2018-04-10T17:04:03.770 回答