java - 私有(private)最终静态属性与私有(private)最终属性

标签 java static attributes private final

在Java中,有什么区别:

private final static int NUMBER = 10;

private final int NUMBER = 10;

都是privatefinal,区别在于static属性。

什么更好?为什么?

最佳答案

一般来说,static的意思是“与类型本身相关联,而不是类型的实例。”

这意味着您可以引用静态变量而无需创建该类型的实例,并且引用该变量的任何代码都引用完全相同的数据。将此与实例变量进行比较:在这种情况下,类的每个实例都有一个独立版本的变量。比如:

Test x = new Test();
Test y = new Test();
x.instanceVariable = 10;
y.instanceVariable = 20;
System.out.println(x.instanceVariable);

打印出 10:y.instanceVariablex.instanceVariable 是分开的,因为 xy 指的是到不同的对象。

可以通过引用来引用静态成员,尽管这样做是个坏主意。如果我们这样做了:

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 declared
private 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 - 私有(private)最终静态属性与私有(private)最终属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1415955/

相关文章:

html - 即使缩放也能填满浏览器窗口的 DIV

c - 为什么这是一个非法的常量表达式?

magento - Magento:通过收集加载产品与产品型号之间的区别

java - 从另一个列表初始化列表的一行

java - 如何逐步将 ejb2 无状态 session bean 迁移到 ejb3?

java - 仅接受两位整数或 float 的正则表达式

c++ - 如何在不加前缀 [类名]::的情况下在友元函数中使用静态成员:

java - 获取组件标签的属性值

c# - 将属性添加到另一个程序集的类

java - 同步的行为