Java中的静态初始化程序

问题:

我的问题是关于static关键字的一个特殊用法。可以使用static关键字覆盖不属于任何函数的类中的代码块。例如下面的代码编译:

public class Test {
    private static final int a;    
    static {
        a = 5;
        doSomething(a);
    }
    private static int doSomething(int x) {
        return (x+5);
    }
}

如果您删除static关键字,因为变量afinal。但是,可以删除finalstatic关键字并使其编译。
这对我来说是混乱的。我应该有一个不属于任何方法的代码段?怎么可能调用它?一般来说,这个用法的目的是什么?或者更好的是,在哪里可以找到关于这个的文档?

回答:

具有静态修饰符的代码块表示class初始值;没有静态修饰符,代码块是instance初始化程序。
类初始化器按照它们被定义的顺序执行(自上而下,就像简单的变量初始化器)一样,当加载类时(实际上,当它被解析,但这是一个技术性)。
实例初始化器按照类在实例化之后定义的顺序执行,紧接在构造函数代码执行之前,紧接在调用超构造函数之后。
如果从int a中删除static,它将成为一个实例变量,您无法从静态初始化程序块访问。这将无法编译错误“非静态变量a不能从静态上下文引用”。
如果还从初始化程序块中删除static,则它将变为一个实例初始化程序,因此int a在构建时进行初始化。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Static initializer in Java

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

87 + = 91