簡體   English   中英

這兩種在Java中調用靜態變量的方式的區別

[英]difference between these two ways of calling a static variable in java

如果我有以下示例代碼:

public class Test{

static String myVariable = "hi";

public Test(){
    System.out.println(myVariable);
    System.out.println(Test.myVariable);
}

public static void main(String[] args) throws SQLException{
        new Test();
    }

}

現在兩者都將打印“ hi”,但是我想知道它們的區別以及何時應該在一個之上使用另一個,或者是否應該僅使用其中一個,因為這是常態。

對於這個非常基本的示例,我感到很抱歉,但是當我讓系統正常工作時,我並沒有真正去理會兩者之間的區別

它們都引用相同的變量,因此原則上它們是相同的。 但是,在實踐中,首選方法可能會與局部變量發生沖突; 例如,添加String myVariable = "bye"; 在您的第一個println()會先輸出byehi

當然,您不會因為使用一個或另一個而違反“規則”。 使用使代碼更易讀的方式,但要注意變量名的沖突。 可以設置Eclipse和其他IDE來向您發出警告 ,這非常有幫助。

當您要確保從類中調用static變量,或者要從另一個類中引用static變量時(如果它不是private ,最好是final ),則您將首選Test.myVariable

public class Test {
    static String myVariable = "hi";
    public Test(){
        String myVariable = "hello";
        System.out.println(Test.myVariable);  // hi
        System.out.println(myVariable);       // hello

    }
}

如果您在那個班級,那沒有什么區別。 myVariableTest.myVariable指向同一對象。

如果要從另一個類調用myVariable ,則必須使用Test.myVariable語法來引用正確的對象。

沒有區別。 但是,您應該始終使用Test.myVariable因為它直接表明對讀取您的代碼的人而言這是一個靜態變量,否則可能導致難以發現的錯誤。

對於第一個,您將直接打印myVariable。 對於第二個,您將從Test類打印myVariable。 您指的是同一實體。 我建議使用Test.myVariable避免以后隨着程序變大而造成混亂。 但是,從技術上講,這是要呈現此靜態變量的方式的選擇。 有時,將靜態變量表示為myVariable對您而言更有意義。 保持一致。 它們允許同時使用兩種方法是有原因的:)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM