我也使用了final和static变量。我发现这些变量是,
最终变量只能通过初始值设定项或赋值语句初始化一次。
与常量的值不同,最终变量的值在编译时不一定是已知的。
我应该将哪些变量声明为最终 -
我经常使用那些值普遍且永远不会改变的变量,例如PI的值。
public static final double PI = 3.141592653589793;
这些变量属于类而不属于对象(实例)。
静态变量仅在执行开始时初始化一次。
所有类实例共享的单个副本
静态变量可以直接通过类名访问,不需要任何对象。
我应该将哪些变量声明为最终 -
大多数情况下,我使用那些我想初始化的变量,并在enitre类中使用它们。
现在,我在我的一个数据库项目中遇到了一个术语final static
。我发现一些数据库对象甚至数据库版本都被声明为statci final。
static final String DATA_BASE = "BackUpDatabase.db";
static final int DATA_BASE_VERSION = 1;
现在,我的问题是我们应该将变量声明为final
或static
或final static
,因为使用其中任何一个都可以解决问题,然后将两者结合使用。
答案 0 :(得分:5)
声明为static final
的变量(反之亦然)被理解为有意义的常量,并以全部大写的形式命名为带空格的下划线。
常见常量的示例是Integer.MAX_VALUE
或Math.PI
。
答案 1 :(得分:5)
static - Only use when a variable which is used globally
final - Only use when you need to declare a value as constant
static final - Only use when a value is globally used and it is a constant.
: - Here global means across all the instances of a java class
答案 2 :(得分:3)
- static
表示Class的成员。它由该类的所有实例共享。
- final
关键字表示常量,但根据其应用的含义有不同的解释。
- 当我们在字段上使用static final
时,请将其视为全局变量。
- PI
是Math Class的静态变量,使用类名称直接访问,Math.PI
。
- 使用大写字母中的所有字母来定义静态最终变量。
最终解释:
final variable :
无法更改其值
final method :
无法覆盖
final class :
无法扩展
final Parameter :
无法更改从调用者的参数
final Object Reference Variable :
它不能引用任何其他对象,而不是它当前引用的对象
答案 3 :(得分:3)
最终仅表示初始化后的值无法更改; 静态表示该属性属于Class和NOT对象。
所以当你说最终静态;这意味着只有一个变量副本,无法更改。
答案 4 :(得分:2)
仅将变量声明为静态可导致其值的一个或多个实例更改其值。
将它们声明为静态final将帮助您创建一个CONSTANT,因为@Vulcan告诉。只存在一个可以在任何地方访问的副本。
答案 5 :(得分:1)
此变量值可以通过两种方式初始化:
JOHN
初始化后,无法通过任何方法(静态或非静态)更改。
答案 6 :(得分:1)
静态方法或类是隐式最终的。 因为对于所有对象只存在此方法的一个副本,这意味着子类无权修改副本。 假设您在父级中有一个方法,并且您不希望子类更改此方法。只需将父方法声明为final。干得好。
class Parent {
final void myMethod() {
//No one can change this method from subclassess
//compiler works efficiently because it knows that this method will not change
}
}
class Child extends Parent{
//from this class I can use myMethod but I cannot override.
}