有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (2) 个答案

  1. # 1 楼答案

    当然,静态最终变量是给定的默认值,请参见以下示例:

    class Test {
        static final int x;
        static {
            printX();
            x = 42;
            printX();
        }
    
        static void printX() {
            System.out.println("Here x is "+x);
        }
        public static void main(String[] args) { }
    }
    

    输出为:

    Here x is 0
    Here x is 42
    

    如果x没有按照JLS 4.12.5中指定的默认值0,那么输出将取决于所使用的JVM。你可能会看到一些随机数

    更新:现在我们已经演示了静态final字段确实获得默认值,您可能想知道为什么默认值不够。除了显而易见的一个问题外,这个问题没有好的答案:"The spec says so"。摘自8.3.1.2:

    It is a compile-time error if a blank final (§4.12.4) class variable is not definitely assigned (§16.8) by a static initializer (§8.7) of the class in which it is declared.

    我们只能猜测这种限制背后的动机,但我认为这是为了让程序更容易理解。如果要将变量设置为0,则显式设置更为清晰

  2. # 2 楼答案

    简单。由于它们是final,您以后将无法修改它们,因此默认值也是final。以后将不允许您修改它。不是很有用