[英]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()
會先輸出bye
由hi
。
當然,您不會因為使用一個或另一個而違反“規則”。 使用使代碼更易讀的方式,但要注意變量名的沖突。 可以設置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
}
}
如果您在那個班級,那沒有什么區別。 myVariable
和Test.myVariable
指向同一對象。
如果要從另一個類調用myVariable
,則必須使用Test.myVariable
語法來引用正確的對象。
沒有區別。 但是,您應該始終使用Test.myVariable
因為它直接表明對讀取您的代碼的人而言這是一個靜態變量,否則可能導致難以發現的錯誤。
對於第一個,您將直接打印myVariable。 對於第二個,您將從Test類打印myVariable。 您指的是同一實體。 我建議使用Test.myVariable避免以后隨着程序變大而造成混亂。 但是,從技術上講,這是您要呈現此靜態變量的方式的選擇。 有時,將靜態變量表示為myVariable對您而言更有意義。 保持一致。 它們允許同時使用兩種方法是有原因的:)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.