2015-09-14 92 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. 
    */ 
}