Java 私有final静态属性vs私有final属性
在Java中,两者之间有什么区别?
private final static int NUMBER = 10;
和
private final int NUMBER = 10;
都是private
和final
,不同之处在于static
属性。
有什么更好的?又为什么呢?
回答:
通常,static
是指“与类型本身相关联,而不是与类型实例相关联”。
这意味着你可以在没有创建类型实例的情况下引用静态变量,并且任何引用该变量的代码都引用完全相同的数据。将其与实例变量进行比较:在这种情况下,该类的每个实例都有一个独立的变量版本。因此,例如:
Test x = new Test();Test y = new Test();
x.instanceVariable = 10;
y.instanceVariable = 20;
System.out.println(x.instanceVariable);
打印出10:,y.instanceVariable
并且x.instanceVariable
是分开的,因为x和y引用不同的对象。
你可以通过引用引用静态成员,尽管这样做不是一个好主意。如果我们这样做:
Test x = new Test();Test y = new Test();
x.staticVariable = 10;
y.staticVariable = 20;
System.out.println(x.staticVariable);
然后将输出20-只有一个变量,每个实例都没有。将其写为:
Test x = new Test();Test y = new Test();
Test.staticVariable = 10;
Test.staticVariable = 20;
System.out.println(Test.staticVariable);
这使行为更加明显。现代IDE通常会建议将第二个列表更改为第三个列表。
不需要像下面这样用内联声明来初始化该值,因为每个实例将具有其自己的NUMBER但始终具有相同的值(是不可变的,并使用文字进行初始化)。这与final static
在所有实例中只有一个变量相同。
private final int NUMBER = 10;
因此,如果不能更改,则每个实例都没有一个副本。
但是,如果在这样的构造函数中初始化是有意义的:
// No initialization when is declaredprivate final int number;
public MyClass(int n) {
// The variable can be assigned in the constructor, but then
// not modified later.
number = n;
}
现在,对于的每个实例MyClass
,我们都可以拥有一个不同但不变的值number
。
以上是 Java 私有final静态属性vs私有final属性 的全部内容, 来源链接: utcz.com/qa/419689.html