2

我也使用了 final 和 static 变量。我发现这些变量是,

最终变量

  • 最终变量只能通过初始化程序或赋值语句初始化一次。

  • 与常量的值不同,最终变量的值在编译时不一定是已知的。

我应该将哪些变量声明为 final-

大多数情况下,我使用那些值普遍不变且永远不会改变的变量,例如 PI 的值。

public static final double PI = 3.141592653589793;

静态变量

  • 这些是属于类而不属于对象(实例)的变量。

  • 静态变量只在执行开始时初始化一次。

  • 由类的所有实例共享的单个副本

  • 静态变量可以通过类名直接访问,不需要任何对象。

我应该将哪些变量声明为 final-

大多数时候,我使用那些我只想初始化一次的变量并在 enitre 类中使用它们。

何时使用最终静态变量

现在,我在我的一个数据库项目中遇到了一个术语final static。我发现一些数据库对象甚至数据库版本被声明为 statci final。

 static final String DATA_BASE = "BackUpDatabase.db";
    static final int DATA_BASE_VERSION = 1;

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

4

7 回答 7

8
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
于 2012-11-27T06:48:53.597 回答
5

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

一个常见的常量例子是Integer.MAX_VALUE, 或Math.PI

于 2012-11-27T06:40:25.617 回答
4

final只说一旦初始化的值就不能改变;static表示该属性属于 Class 而不是对象。

所以当你说final static ; 这意味着只有一个变量副本并且不能更改。

于 2012-11-27T06:52:15.443 回答
3

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

- final Java 中的关键字表示常量,但根据应用的内容有不同的解释。

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

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

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

最终解释:

final variable :它的值不能改变

final method :它不能被覆盖

final class :不能扩展

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

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

于 2012-11-27T06:51:15.353 回答
2

仅将变量声明为静态可能会导致其值被声明它的类的一个或多个实例更改。

正如@Vulcan 所说,将它们声明为 static final 将帮助您创建一个 CONSTANT 。只有一个副本存在,可以在任何地方访问。

于 2012-11-27T06:46:00.847 回答
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.
}
于 2017-04-15T14:55:03.823 回答
1

静态变量

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

最终变量

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

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

一旦初始化,它就不能被任何方法(静态或非静态)更改。

于 2016-10-26T18:45:40.983 回答