我提取某人的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;像是打破方法的捷径.是对的吗?
Sir*_*tor 10
对,那是正确的.请查看http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html的底部:
退货声明
最后一个分支语句是return语句.return语句从当前方法退出,控制流返回到调用方法的位置.return语句有两种形式:一种是返回值,另一种是不返回值.要返回值,只需将值(或计算值的表达式)放在return关键字之后.
return ++ count; 返回值的数据类型必须与方法声明的返回值的类型匹配.当方法声明为void时,请使用不返回值的return形式.
返回;
回答你的第一个问题:我假设这段代码已被反编译。请注意,反编译器并不是将二进制 dex 代码一对一转换为用于生成这些二进制文件的任何 Java 代码。他们经常在解析不同的控制结构(如循环和开关)时遇到问题。此外,二进制文件可能会被混淆,这意味着编译后二进制文件会被修改为完全可操作的,但更难反编译和逆向工程(基本上是为了防止您在这里尝试做的事情:))。他们可以添加死代码,例如不应该存在的 return 语句、mangle 循环和 if 语句来混淆反编译的代码等。