私有最终静态属性与私有最终属性

在Java中,以下两者之间的区别是什么:

私有最终静态整数=10;

私人最终整数=10;

两者都是私有最终,区别在于静态属性

什么更好?为什么

一般来说,静态表示“与类型本身关联,而不是与该类型的实例关联。”

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

测试x=新测试();
测试y=新测试();
x、 instanceVariable=10;
y、 instanceVariable=20;
System.out.println(x.instanceVariable);

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

您可以通过引用引用静态成员,尽管这样做不好。如果我们这样做了:

测试x=新测试();
测试y=新测试();
x、 静态变量=10;
y、 静态变量=20;
System.out.println(x.staticVariable);

然后打印出20个-只有一个变量,而不是每个实例一个。这样写会更清楚:

测试x=新测试();
测试y=新测试();
Test.staticVariable=10;
Test.staticVariable=20;
System.out.println(Test.staticVariable);

这使得这种行为更加明显。现代IDE通常会建议将第二个列表更改为第三个

没有理由像下面那样使用内联声明初始化值,因为每个实例都有自己的编号,但始终使用相同的值(不可变,并使用文本初始化)。这与所有实例只有一个最终静态变量相同

私人最终整数=10;

因此,如果它不能更改,那么每个实例都有一个副本是没有意义的

但是,如果在构造函数中初始化,则有意义,如下所示:

//声明时没有初始化
私人最终整数;
公共MyClass(int n){
//变量可以在构造函数中赋值,但是
//以后不会修改。
数字=n;
}

现在,对于MyClass的每个实例,我们可以有一个不同但不可变的值number

发表评论