【发布时间】:2014-11-19 05:33:15
【问题描述】:
为什么静态初始化程序不能有多个退出点? Java 语言规范是这样说的吗?
当尝试将代码编译为:
class HelloWorldApp {
static {
if(1 > 2)
return;
System.out.println("static");
}
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
编译器打印出错误:return outside method
使用javap 的Java 反汇编表明static 是一个void 方法,所以理论上是否有可能创建一个具有多个“返回”的字节码?
【问题讨论】:
-
JLS 声明
static初始化程序中的return语句是非法的 here。 -
这看起来像是一个 JVM 问题,而不是 JLS 问题。规格有时确实会有所不同,这可能就是其中之一。
-
@SotiriosDelimanolis 把它变成一个答案,所以我可以接受它
-
@ChrisK 我能够用 Jasmin 创建 .class 文件,谢谢,所以它在 JVM 中运行没有问题。这让我想知道为什么 JLS 中会禁止 return 语句。