我想知道为什么在Java中允许使用以下代码,而不会出现编译错误?在我看来,这段代码通过不返回任何string
来破坏方法签名。谁能解释一下我错过了什么吗?
public class Loop {
private String withoutReturnStatement() {
while(true) {}
}
public static void main(String[] a) {
new Loop().withoutReturnStatement();
}
}
方法的最后}
是不可访问的--只有在可以在不返回值的情况下到达方法的末尾时,才会出现编译错误。
这对于由于异常而无法到达方法结尾的情况更有用,例如。
private String find(int minLength) {
for (String string : strings) {
if (string.length() >= minLength) {
return string;
}
}
throw new SomeExceptionIndicatingTheProblem("...");
}
这方面的规则见JLS第8.4.7节:
while
语句可以正常完成,前提是以下至少有一项为真:
while
语句是可达的,并且条件表达式不是值为true
的常量表达式(§15.28)。break
语句退出while
语句。在您的示例中,条件表达式是一个值为true
的常量,并且没有任何break
语句(可达或其他),因此while
语句无法正常完成。
问题内容: 我想知道为什么在Java中允许以下代码,而不会出现编译错误?在我看来,此代码通过不返回any来破坏方法签名。有人可以解释一下我在这里想念的东西吗? 问题答案: 该方法的最终版本无法访问-只有在可能返回方法末尾而不返回值的情况下,您才会收到编译错误。 这在由于异常而导致方法的末尾无法到达的情况下更有用。 规则在JLS第8.4.7节中: 如果声明某个方法具有返回类型(第8.4.5节),则如
我正在尝试开发一个喷气背包组合项目 我已经下载了Android Studio Arctic Fox 2020.3。1金丝雀9型 然后,我尝试创建一个带有“空撰写活动”的示例项目 但是在构建应用程序时,我得到了以下错误 我的Gradle配置是
问题内容: 尽管我知道问这个问题会有点愚蠢,但我仍然想查询有关它的技术观点的更多信息。 无限循环的简单示例: 如何从此类外部中断(停止)此无限循环(例如,在继承的帮助下)? 问题答案: 即使写这篇文章我也觉得很脏,但是… 从不同的线程,你可以调用一个实现,抛出一个当你调用。
问题内容: 我必须使用测试工具编译我的代码,但是,当该测试工具调用我的方法时,我收到此错误: “课程Course中的getCourseDetails方法不能应用于给定类型; 必需:java.lang.String,int,java.lang.String,boolean,java.lang.String.java.lang.String,double 找到:没有参数 原因:实际参数列表和形式参数列
我是Java企业开发领域的新手。我所在组织的Java大师正在无限期探亲假,我被分配了维护他开发的一些Java应用程序的任务。他在离开之前用Maven在我的计算机上安装了Eclipse[Kepler SR1],看起来工作正常。 现在我已经准备好部署我的第一个修改,并且需要运行Maven,但是我很难让它工作--我在我的控制台上得到以下输出: [错误]无法执行目标org.apache.maven.plu
我一直在研究GNU的g编译器编译的汇编,它看起来像一个无限循环(g -S file.c -o的部分输出): 除了最后一条jmp指令之外,所有这些指令都是movq或计算指令,但这只是让我们回到.L3。这是以下代码的主体: 它是如何退出循环的?看起来它只是减少了i(subq$1,-8(%rbp)),并在没有比较的情况下重新启动。