2011-11-06 69 views
0

我對Java代碼中的變量聲明感到困惑。Java變量約定

我讀了...不要嘗試使用全局變量聲明。

不要使用這樣的事情:

package cls; 
public class test { 
    private String var; 

    public someMethod(){ ... } 
} 

和使用?

package cls; 
public class test { 

    public someMethod(){ 
     String var = null; 
    } 
} 

我不知道這是正確的方式....

回答

2

這完全取決於你所需要的。

但是,您的第一個示例不是全局變量 - 它是一個實例變量。

變量的範圍應儘可能小。這使得代碼更易於推理。

實例變量是OOP的核心 - 包含對象狀態的類(對象)以及對該狀態進行操作的方法。例如,Person類很可能有姓和名的實例變量:

public class Person { 
    private String firstName; 
    private String lastName; 
    // Plus getters and setters for each. 
} 

這樣的實例方法直接訪問的名字和姓氏的變量,而不必需要它們的所有方法之間傳遞它們。

第二個例子是一個局部變量。只有在聲明的方法中才可見。對其的引用可能會傳遞給其他方法。

1

兩者都是正確的。這些都不是全局變量。第一個是班級領域。它對你所做課程的每個實例都是獨一無二的。類字段(即變量)保留在類的實例中,直到類本身被刪除。

第二個是方法範圍變量。只是爲了臨時的目的來執行方法工作所需的計算,一旦方法中的代碼完成,變量就會消失。

您使用每個用於不同的目的。例如,如果您正在編寫Car類,那麼您可能會有SteeringWheel和Brake的類字段。但是,如果您有一種方法來計算每加侖平均行駛里程,則可以創建一個方法範圍變量來幫助執行計算。

1

Java沒有全局變量。第一個變量是類級別並維護類實例的狀態,因此只存在類的一個實例,而第二個變量只存在於方法執行期間存在的方法局部變量。您可以使用第一個變量來存儲跨越多個方法調用的狀態信息。一旦控制離開方法,第二個變量就會消失。而且,每次調用方法時,都會在堆棧上創建另一個可用同一本地名稱訪問的變量。

+0

如下文所述,Java那樣在公共靜態類成員的形式全局變量。 –

+0

謝謝你們。我現在知道了 ! – Kai

+0

@ScottA在用Java定義這些變量和公共靜態的語言中,全局變量是有區別的。這些變量在範圍上不是全球性的。事實上,他們有班級範圍,需要獲得資格。此外,從加載類到卸載時存在公共靜態。有關Java中的各種變量,請參見Java語言規範(第3版)第4.12.3節。 –

1

在Java中,您不能像在C語言中那樣擁有真正的「全局」變量。Java迫使您以面向對象的方式構建您的程序。

在你上面的例子中,如果整個test對象都需要var對象並且對存儲很重要,那麼你可以使用第一個例子。如果var只需要在someMethod併爲test對象來存儲它,然後使用第二個示例這並不重要。

注意到,即使在第一個例子,var封裝一個test對象之內,所以它不是真正的「全球性」可言,除了可能稍微的test成員函數(這是整點實例/成員變量)。

Java中的最接近「全球性」的數據是這樣的:

public class GlobalVars { 
    public static int globalInt; 
} 

而且你可以在你的代碼中訪問globalIntGlobalVars.globalInt,而不產生的GlobalVars一個實例。

+0

事實上,實際而言類的靜態成員是在以同樣的方式,這將是在全球C.有可用於整個過程變量的一個實例,它可以被任何東西任何地方進行修改。以這種方式使用類的靜態成員(公共,不是最終的)是一樣危險,在C PL/SQL全球具有與其包裝規格變量,這些變量的命名空間相同的方式使用Java公共靜態是相同的功能,但仍全球可訪問。 –