2016-07-26 109 views
0

我使用的是NetBeans IDE,在Java之前,我是一名C++程序員。從C++中,我學到的是常量變量名只能包含大寫字母。我認爲大多數編程語言表明,常量變量應該只包含帶下劃線的大寫字母來分隔單詞。爲什麼非靜態最終成員變量不需要遵循常量命名約定?

我的IDE,NetBeans只會在我嘗試聲明小寫字母的static成員變量時警告我。沒關係,如果變量是final,但是非靜態的。

final int mem1 = 90; // no warning 
static final int mem2 = 90; // warning 

不應該強制程序員使用大寫字母來命名任何類型的(靜態,非靜態)常量變量嗎?

+0

這是一個命名約定。你說得對,爲了可讀性應該遵循,但我不認爲它會被強制執行,也不應該強制執行。 – SomeJavaGuy

+0

因爲命名約定不是Java語言規範的一部分。 – EJP

+1

非靜態的'final'不是一個真正的常量。它也可以基於一些運行時計算值在構造函數中初始化。另請參見http://stackoverflow.com/questions/10844268/difference-between-final-variables-vs-static-final-variables –

回答

6

final不會使值成爲一個常量,它只是意味着該字段的值只能分配一次。

這裏的一個非恆定的最終域的一個例子:

public final class IntHolder { 
    private final int value; 

    public IntHolder(int value) { 
    this.value = value; 
    } 

    public int get() { 
    return value; 
    } 
} 

這裏,value字段是用於IntHolder每個實例明顯不同,所以它不是一個常數。像常數一樣命名該字段只會導致混淆。

+0

我明白了。謝謝 :) –

5

只有常數應該是大寫。然而,它可能取決於程序員,因爲他如何遵循該公約。有些人還喜歡用'_'開頭,後面跟着小寫的名字。而且,不需要在編譯器中進行這樣的檢查,因爲它可能取決於程序員的看法。