什么回报; (没有价值)是什么意思?

hrs*_*ono 10 java return

我提取某人的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(...)
...
}
Run Code Online (Sandbox Code Playgroud)

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

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

Bra*_*rad 20

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


Sir*_*tor 10

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

退货声明

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

return ++ count; 返回值的数据类型必须与方法声明的返回值的类型匹配.当方法声明为void时,请使用不返回值的return形式.

返回;


Den*_*kiy 3

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