必须在构造函数完成之前初始化最终引用变量?为什么?

时间:2015-03-15 14:39:47

标签: java

必须在构造函数完成之前初始化最终引用变量。

这意味着可以在

时完成相同的操作
  1. 与实例变量声明一起

    final Foo foo = new Foo()
    
  2. 在初始化程序块中

    {
        foo = new Foo();
    }
    
  3. 在构造函数

    public Example()
    {
        foo = new Foo();
    }
    
  4. 如果我错了,请纠正我?是什么原因?原始最终变量(如intfloat

    )的规则是否相同?

2 个答案:

答案 0 :(得分:2)

不,无法从静态块访问实例变量。你称之为静态块的实际上是一个实例初始化块。

此规则的原因是最终字段的定义是一个只能分配一次的字段。如果可以在构造函数之后初始化它,在一个方法中,编译器将无法知道此方法只被调用一次,并且另一个方法在初始化之前不会尝试读取该字段的值,使final的整个概念毫无用处。

答案 1 :(得分:0)

  

必须在构造函数之前初始化最终引用变量   完整。

是的......它应该是。但请记住

static final ClassAbc myObj = new ClassAbc(); // This should be initialize while declaring
// because it is static and visible for every time (donot need object to call it)

要点/原因是最终变量应该被初始化之前它是 甚至可以访问(意思是'可以使用')....

  

规则是否与原始最终变量相同,如'int'或   '漂浮'?

是原始和非原始类型的规则是相同的。