2015-09-14 144 views
2

在java中,常量被称为keyword(final),其值永远不会改变。我看到一些人在不声明静态修饰符的情况下创建常量。我的问题是,如果常量被声明为静态?如果是这样或者没有,为什么?Java常量和静态修饰符

+0

任何用例?例如? –

回答

3

如果在声明变量时为final变量赋值,那么它不是static,因为每个实例都有自己的变量具有相同的值,这是浪费的。但是,如果您需要一个实例变量,其值只能设置一次(但不同的实例可能具有不同的值),则该变量将不得不为final,而不是static

例如:

class Person 
{ 
    final int id; 
    public Person(int id) { 
     this.id = id; 
    } 
} 
0

技术上,关键字final足以让一个常数,因为你不能改变一次分配的最终变量的值。

static如果常量不绑定到特定的对象实例,应该使用。

例如,考虑你有一个Circle类,并且你有一个计算面积的方法。您需要使用常数Pi来达到此目的。 Pi常数不会从圆圈变为圆圈。因此将Pi声明为静态final是有意义的。

0

无论你喜欢什么。我会亲自使用静态。当你声明它为静态时,你不需要创建一个对象。你也可以创建一个'常量'文件,在其中存储所有的常量。 public final static ...

所以,你基本上使用静态最终,如果它是所有对象使用的“常量”。如果不是,只需将其作为final来传递给构造函数。

2

你首先需要了解什么常数 DO(即,当你标记字段/局部变量final会发生什么。)

原始/字符串字段被标记为final,它变成编译时常量即它的值作为字节码本身的一部分传递。因此其值不是计算/生成的运行时。这给你一个性能优势。

关键字static用于表示 - 该字段对于类别的每个实例都不是唯一的。您也可以有非静态的final常量。另外,如果方法局部变量(原始)被标记为final,它也变成常量。因此,不,static与常量无关。这是一个设计的选择。

0

带有“final”关键字的constan将永远不会改变......其实你不能改变这个字段所引用的实例,但是你可以改变这个实例中的值。

想象一下这样的例子:

class SomeClass{ 
final Car MYCAR; 
... 
} 

有了这个代码,你将不能够改变的MYCAR参考:

myCar = new Car(.....);

但你可以这样做:

myCar.setPrice(10000);

所以是的,如果SomeClass的任何实例需要有自己的对象副本MYCAR,但不希望任何人更改此对象的引用,则不要在此字段中设置static

0

当您在类中使用关键字static时,类的所有实例。即一个类的所有对象共享相同的变量,如果你声明一个类作为final,它不能被实例化(它的对象不能被创建)。所以如果你声明一个变量final,那么它只能赋值一次。 假设

class CalculateArea { 

    final static double PI = 3.1417; 
    /*write rest of the code to calculate area. 
    the value of PI will remain constant no matter 
     how many times its object is made 
    if you try to override the value of `PI` it will raise an error. 
    */ 
}