我只是在研究最终数据成员,我想最终变量与静态最终变量有什么区别?
我知道一个既是静态又是最终的字段只有一个存储,而最终变量将具有与每个实例相关联的存储。
但是即使我只声明了一个最终变量,那么它对于所有对象都保持不变,因为我需要在程序本身而不是在运行时初始化它们。
所以,除了内存相关问题之外,两者基本上没有区别??
我只是在研究最终数据成员,我想最终变量与静态最终变量有什么区别?
我知道一个既是静态又是最终的字段只有一个存储,而最终变量将具有与每个实例相关联的存储。
但是即使我只声明了一个最终变量,那么它对于所有对象都保持不变,因为我需要在程序本身而不是在运行时初始化它们。
所以,除了内存相关问题之外,两者基本上没有区别??
但是即使我只声明了一个最终变量,那么它对于所有对象都保持不变,因为我需要在程序本身而不是在运行时初始化它们。
不,可以在构造函数中初始化非静态最终成员。之后不能重新分配它们。
这final
意味着您只能将值分配给变量一次。final
可以在许多范围内使用并且非常有用,在对象属性中,您必须(并且强制)在声明、构造函数或对象的初始化块中设置值。
并且static
是设置变量的范围,这意味着在类属性中,值是存储在类中,并且即使没有对象也可以访问,当您使用static final
或final static
必须(并且强制)设置值时声明或在类的静态初始化代码中。
例子:
public class NewClass {
static final int sc = 123; //I recommend to use this declaration style.
final static int scc;
final int o = 123;
final int oo;
final int ooo;
static {
scc = 123;
}
{
oo = 123;
}
public NewClass() {
ooo = 123;
}
void method(final int p) {
// p=123; //Error, the value is only assigned at the call of the method.
final int m = 123;
final int mm;
mm = 123;
// mm = 456; //Error, you can set the value only once.
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(m + p); //You still can reach the variables.
}
}).start();
}
}
final 变量:声明为 final 的变量将是一个常量,它的值不能改变,并且可以在构造函数中初始化。
静态最终变量:必须在声明期间或在静态初始化程序块中对其进行初始化。