【问题标题】:What does return; (without value) mean?返回什么; (没有价值)是什么意思?
【发布时间】:2023-04-06 04:15:01
【问题描述】:

我提取了某人的 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; 就像是打破方法的捷径。对吗?

【问题讨论】:

  • 反编译器并不总是完美的。
  • 每个方法最终都会返回。因此,具有void 返回类型的方法可以return; 或将其排除在外。它不是必需的,是一个偏好问题。
  • @Vulcan 所以它们是代码的损坏部分?
  • @squiguy 这不仅仅是一个偏好问题。它提供了异常无法实现的有用目的——它允许您在不破坏执行路径的情况下结束执行路径。我的意思是,您可以在该调用之外返回并继续下一行,而不是在第一个 catch 语句中抛出异常并输入完全不同的执行路径。因此,虽然 void 方法一直不需要它,但它仍然不仅仅是个人喜好。

标签: java return


【解决方案1】:

是的,没错。看底部http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html

返回声明

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

返回++计数;返回值的数据类型必须与 方法声明的返回值的类型。声明方法时 void,使用不返回值的return形式。

返回;

【讨论】:

  • 谢谢!我从来不知道void方法可以使用return
【解决方案2】:

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

【讨论】:

  • @HussainAkhtarWahid 是的,我认为它没有任何回报
【解决方案3】:

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

【讨论】:

  • 感谢它确实解释了为什么所有 forwhile 循环似乎都有问题。
【解决方案4】:

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

【讨论】:

    猜你喜欢
    • 2013-04-25
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 2017-04-13
    • 1970-01-01
    相关资源
    最近更新 更多