我在static final class variable
和之间有一些混淆final instance variable
。
这是示例代码:-
class Foof{
final int size=3;
final int whuffie;
Foof()
{
whuffie=42;
}
public static void main(String [] args){
Foof obj1 = new Foof();
Foof obj2 = new Foof();
obj1.size=53; //compile time error
System.out.println(obj1.size);
obj2.whuffie=45; //compile time error
System.out.println(obj2.whuffie);
}
}
错误:-
ankit@stream:/home/Data/JAVA/practice/src/test.com/test-20121031_static_demystified$ javac Foof.java
Foof.java:14: error: cannot assign a value to final variable size
obj1.size=53; //compile time error
^
Foof.java:16: error: cannot assign a value to final variable whuffie
obj2.whuffie=45;
^
2 errors
所以我的问题是,如果每个不同的实例不能有不同的值,那么拥有最终实例变量的意义何在。我的意思是,如果它们对每个实例都具有相同的值,那么我们为什么不将它们声明为类变量(静态最终类变量),因为这将达到相同的目的,而且我们不需要创建对象来访问它们。
编辑-1:-
class Foof{
final int size=3;
final int whuffie;
Foof()
{
whuffie=42;
size = 23; //compile-time error.
}
public static void main(String [] args){
Foof obj1 = new Foof();
Foof obj2 = new Foof();
//obj1.size=53;
System.out.println(obj1.size);
//obj2.whuffie=45;
System.out.println(obj2.whuffie);
}
}
错误:-
Foof.java:8: cannot assign a value to final variable size
size = 23;
^
1 error
根据错误,我可以确定在对象创建期间为第一个大小分配了一个值 =3。