何时选择变量来声明为最终静态

问题描述 投票:2回答:7

我也使用了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;

现在,我的问题是我们应该将变量声明为finalstaticfinal static,因为使用其中任何一个都可以解决问题,然后将两者结合使用。

java android static final
7个回答
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

5
投票

声明为static final的变量(或反之亦然)被理解为有意义的常量,并且在所有大写中以空格的下划线命名。

常见常数的一个例子是Integer.MAX_VALUEMath.PI


3
投票

- java中的static表示Class的成员。它由所有类的实例共享。

- java中的final关键字表示常量,但根据其应用的含义有不同的解释。

- 当我们在字段上使用static final时,将其视为全局变量。

- PI是Math Class的静态变量,它使用类名直接访问,如Math.PI

- 使用大写字母中的所有字母来定义静态最终变量。

决赛的解释:

final variable :它的价值不能改变

final method :它不能被覆盖

final class :它无法扩展

final Parameter :它的值不能改变,它从调用者的参数中得到

final Object Reference Variable :它不能引用任何其他对象,除了它当前所指的对象


3
投票

final只表示初始化后的值不能改变; static表示该属性属于Class和NOT对象。

所以当你说最后的静态;这意味着只有一个变量副本,无法更改。


2
投票

仅将变量声明为静态可以通过声明它的类的一个或多个实例来改变它们的值。

将它们声明为静态final将帮助您创建一个CONSTANT,因为@Vulcan告诉。只存在一个可以在任何地方访问的副本。


1
投票

静态变量

  • 您可以通过调用同一类中的静态方法来更改静态变量值。
  • 对于从此类创建的所有对象,静态变量值将相同。如果我们改变了值,那么该类的所有对象都将获得新值,旧值将丢失。
  • 值可以多次更改。

最终变量

此变量值可以通过两种方式初始化:

  1. 在声明变量时。
  2. 在创建该类的对象时,类构造函数将具有this.finalvariable = newfinalvariablevalue;

初始化后,不能通过任何方法(静态或非静态)更改它。


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.
}
© www.soinside.com 2019 - 2024. All rights reserved.