当前位置: 首页 > 面试题库 >

Java 私有final静态属性vs私有final属性

荆哲
2023-03-14
问题内容

在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.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 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



 类似资料:
  • 我正在尝试用Groovy编写一些Spock测试,以测试一些Java代码(特别是一个servlet过滤器)。我有一些和变量想要模拟,但我无法确定是否有方法可以这样做。我知道可用于方法,对于变量有类似的东西吗? 感谢十五世。我现在可以用以下内容来设置:

  • 如果你的javascript语言基础还可以,应该明白类、基类、子类、父类等概念。如果你有这些类的概念,那么在学习Threejs的过程中,如何查找Threejs文档将会比较顺利。 点材质PointsMaterial、基础线材质LineBasicMaterial、基础网格材质MeshBasicMaterial、高光网格材质MeshPhongMaterial等材质都是父类Material的子类。 各种各

  • 问题内容: 我在类中使用 私有静态最终LOGGER 字段,并且我希望 LOGGER.isInfoEnabled() 方法返回 false 。我如何通过使用Mockito或jMockit模拟静态的final字段 我的课是: 其junit为: 当我运行它的结果是: 我是jmockit的新手,我希望上述junit案例能够成功运行。而且我必须使用JMockit或Mockito,不能使用Powermocki

  • 我在我的类中使用私有静态final LOGGER字段,我希望LOGGER.isInfoEnabled()方法返回false。如何使用mockito或jMockit模拟静态final字段 我的课是: 当我运行它时,结果是: 我是jmockit新手,我希望上面的junit案例能够成功运行。我只能用JMockit或mockito,不能用powermockito。请帮帮忙。

  • 是否有可能映射包的私有属性(不使用lombok)。我们成功地将包私有类映射到DTO,但为了成功映射属性,我们需要它们具有公共getter和setter。 我安慰自己,这个类仍然是包私有的,但在属性之前它是公开的:) 谢谢!亚历克斯。

  • 第一件事先...我是java新手,最近才开始尝试多类和多方法代码。 这是我目前所掌握的... 我已经决定,我想将行数/学生数保存为私有静态final int,(当前的分类只是占位符)。我只是不太确定如何把它保存成这样。在所有示例中,私有静态final声明如下: TLDR;我非常肯定这已经讨论过很多次了,但是使用方法定义公共静态final的协议是什么呢?