作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
这不是有效的代码:
public class MyClass
{
private static boolean yesNo = false;
static
{
if (yesNo)
{
System.out.println("Yes");
return; // The return statement is the problem
}
System.exit(0);
}
}
这是一个愚蠢的例子,但在静态类构造函数中我们不能return;
。为什么?这有充分的理由吗?有人对此有更多了解吗?
所以我应该做 return
的原因是在那里结束构建。
谢谢
最佳答案
我认为原因是初始化器与字段初始化一起携带(在实例初始化器的情况下,还与构造函数一起携带)。换句话说,JVM 只识别一个地方来初始化静态字段,因此所有初始化 - 无论是否在 block 中 - 都必须在那里完成。
因此,例如,当您编写一个类时:
class A {
static int x = 3;
static {
y = x * x;
}
static int z = x * x;
}
那么实际上就好像你写了:
class A {
static int x, y, z;
static {
x = 3;
y = x * x;
z = x * x;
}
}
如果您查看反汇编,可以确认这一点:
static {};
Code:
0: iconst_3
1: putstatic #5; //Field x:I
4: getstatic #5; //Field x:I
7: getstatic #5; //Field x:I
10: imul
11: putstatic #3; //Field y:I
14: getstatic #5; //Field x:I
17: getstatic #5; //Field x:I
20: imul
21: putstatic #6; //Field z:I
24: return
因此,如果您在静态初始值设定项的中间某处添加了一个“return”,它也会阻止计算 z。
关于java - 返回静态初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2607112/
我想成为 Spark 纱客户(link)。是否需要安装hadoop?还是只安装 yarn 可以吗? (by this link) 最佳答案 No Spark不需要Hadoop即可运行。 Apache
我是一名优秀的程序员,十分优秀!