我也使用了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
,因为使用其中任何一个都可以解决问题,然后将两者结合使用。
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
声明为static final
的变量(或反之亦然)被理解为有意义的常量,并且在所有大写中以空格的下划线命名。
常见常数的一个例子是Integer.MAX_VALUE
或Math.PI
。
- java中的static
表示Class的成员。它由所有类的实例共享。
- java中的final
关键字表示常量,但根据其应用的含义有不同的解释。
- 当我们在字段上使用static final
时,将其视为全局变量。
- PI
是Math Class的静态变量,它使用类名直接访问,如Math.PI
。
- 使用大写字母中的所有字母来定义静态最终变量。
决赛的解释:
final variable :
它的价值不能改变
final method :
它不能被覆盖
final class :
它无法扩展
final Parameter :
它的值不能改变,它从调用者的参数中得到
final Object Reference Variable :
它不能引用任何其他对象,除了它当前所指的对象
final只表示初始化后的值不能改变; static表示该属性属于Class和NOT对象。
所以当你说最后的静态;这意味着只有一个变量副本,无法更改。
仅将变量声明为静态可以通过声明它的类的一个或多个实例来改变它们的值。
将它们声明为静态final将帮助您创建一个CONSTANT,因为@Vulcan告诉。只存在一个可以在任何地方访问的副本。
此变量值可以通过两种方式初始化:
this.finalvariable = newfinalvariablevalue;
初始化后,不能通过任何方法(静态或非静态)更改它。
静态方法或类是隐式最终的。因为对于所有对象只存在此方法的一个副本,这意味着子类无权修改副本。假设您在父级中有一个方法,并且您不希望子类更改此方法。只需将父方法声明为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.
}