最后一个字段必须按照约定在Java中初始化一次。不允许进行其他初始化。下面的程序演示如何在类中使用最终和最终静态字段。
package main;
import java.util.ArrayList;
import java.util.List;
final public class Main
{
private final static int a=10;
private final List<String> list;
public Main()
{
list=new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
}
private void show()
{
for(String l:list)
{
System.out.println(l);
}
}
public static void main(String[] args)
{
new Main().show();
}
}
在上面的代码中,类型为的字段list
是在构造函数本身内初始化的。但是,同样的情况不适用于最终的静态字段a
。在构造函数体中初始化a
的尝试会导致编译时错误,指示“无法将值赋给最终变量a”。为什么同样的事情不适用于最终的静态字段列表,它允许在构造函数内初始化?
发布于 2011-11-15 22:30:37
同样的情况也适用于最终的静态字段,但在与构造函数最接近的静态字段中,即静态初始化程序:
private final static int x;
static {
x = 10;
}
(可以说,这更接近实例初始化程序,而不是构造函数,但它是静态的最接近的。它不像你可以指定参数或任何东西。)
构造函数是在类的每个实例化上运行的--如果能够更改最终的静态字段,它将不是非常最终的,对吗?请记住,只有一个与类型关联的静态变量的“副本”,而不是像与实例变量一样与类型的每个实例关联的一个“副本”。
发布于 2011-11-15 22:37:58
如果您单独声明了final,那么它是每个实例的常量,并且可以像以前一样在构造函数中初始化它。但是,如果声明最终静态,所有实例都将共享相同的变量。因此,您不能在构造函数中初始化,因为每当创建实例时,您都试图更改值。
发布于 2011-11-15 22:30:58
您已经用它的定义初始化了a,因为您将它设置为10。之后,您不能在构造函数中修改它。
运行两次构造函数也会给列表带来问题。
https://stackoverflow.com/questions/8147577
复制相似问题