2012-02-25 118 views
2

这甚至可能,少数认为其可能的,我是在这里看到过link ..但是当我亲自试过它给了我编译时错误..是否可以在声明后初始化最终变量..?

我的意思是,

Class A{ 
    private final String data; 

    public A(){ 
     data = "new string"; 
    } 
} 

谢谢前进..

+1

你得到的编译时错误是什么? – Rocky 2012-02-25 09:03:36

+0

也许你的编译时错误与大写'Class'有关。其余的都很好,必须编译。 – home 2012-02-25 09:03:49

+0

**空白的最终字段数据可能尚未初始化** ...这是我得到的.. – ngesh 2012-02-25 09:05:19

回答

5

是的,这是可能的。班级写小案件c。否则你的代码是完全正常的(除了身份证明):

public class A { 
    private final String data; 

    public A() { 
     data = "new string"; 
    } 
} 
4

你可以在声明后初始化一个最终的实例变量。

  • 如果它是静态的,则必须在静态初始化块 中对其进行初始化。
  • 否则,你必须在构造函数中初始化它。

您发布的代码的问题是大写C。鲍里斯指出应该是class

2

就像鲍里斯建议的代码很好。然而,你不能做的是为最终的变量数据赋值第二个值。 data = "another string";将不会编译,因为数据是最终的,因此在初始化后它的值不能被改变。

public class A { 
    private final String data; 

    public A() { 
     data = "new string"; 
     data = "another string"; 
    } 
} 
2

很可能您有多个构造函数,在这种情况下,您必须在每个构造函数中初始化最终实例字段。