2013-08-04 82 views
-10

像这样的节目里面,为什么一个变量不需要类型的静态块

static { 
    a = 6; 
} 

为什么元素 “a” 不需要

+9

'A' 确实需要的类型。 a的类型必须在静态块之上声明,否则将无法编译。 –

+1

这本身不会编译。 –

+0

[This](http://www.jusfortechies.com/java/core-java/static-blocks.php)是我在这个主题上找到的最佳参考。 – Mordechai

回答

1

每个变量都需要Java中的类型。

10

这不是一个变量的声明,这是一个变量的赋值。 'a'的类型在其他地方定义。所以,这个代码本身不会编译,你需要一个变量声明,如:

class X { 
    private static int a; 

    static { 
     a = 6; 
    } 
} 

作为回答下面的评论,这是initializion序列:

  1. 静态报表/静块被执行。
  2. 实例变量被赋予默认值
  3. 如果实例变量被分配了一个编译时间常量,则会初始化实例变量。否则,将使用项目5完成(实例变量实例初始化程序将按照它们定义的顺序从顶部到底部一起完成)。
  4. 构造函数运行
  5. 实例初始化块在所有调用超级已完成但尚未执行构造函数的其他部分之前运行。
  6. 其余的构造函数被执行。
+0

这个静态在构造函数之前运行吗? –

+0

结帐第12.4章为这个答案:http://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html –

+0

我已经更新了我的例子更扩展的答案[来源] (http://www.coderanch.com/t/267125/java-programmer-SCJP/certification/Initializing-Sequence) –

0

我想你的地方初始化的变量

private static int a; 
static { 
    a = 6; 
    } 
相关问题