簡體   English   中英

為什么我不能在Java構造函數中使用靜態變量?

[英]Why can't i use static variable in java constructor?

編譯器說illegal modifier for parameter i
請告訴我我在做什么錯。 為什么我不能在Java構造函數中使用靜態變量?

class Student5{  

    Student5() {  
        static int i = 0;
        System.out.println(i++);  
    }

    public static void main(String args[]){  
        Student5 c1 = new Student5();
        Student5 c2 = new Student5();
        Student5 c3 = new Student5();
    }
}  

由於您在哪里聲明i

Student5(){  
    static int i=0;
    System.out.println(i++);  
}

編譯器在構造函數中將其視為局部變量:局部變量不能聲明為static 有關允許局部變量使用哪些修飾符的詳細信息,請參見Java Language Specification的14.4節

從代碼似乎正在嘗試做的事情來看,您可能希望i成為Student5的靜態成員,而不是構造函數中的局部變量:

class Student5{
    private static int i = 0;

    Student5(){  
        System.out.println(i++);  
    }

. . .
}  

如果您要聲明static變量,則可以在構造函數之外的類級別進行聲明,如下所示:

public class Student5{

   private static int i;

}  

您在構造函數中聲明了static ,它是一個局部變量,並且局部變量不能為static 這就是為什么您要獲取- illegal modifier for parameter i的原因。 最后,對於初始化static變量,您可以使用靜態初始化塊(盡管不是強制性的)-

public class Student5{

   private static int i;

   static {
      i = 5;
   }

}  

這就是語言是如何設計的。什么,如果你想有另一個int指定字段i在構造函數?然后i應該考慮? 此外,在構造函數中類動初始化階段即調用之前,靜態字段被初始化。 僅當創建新實例時才調用構造函數。

想象一下,如果您加載並初始化一個類而不創建一個新實例 ,將會發生(假設會發生)。

靜態變量是無需類的實例即可引用的變量。 通過定義一個而不是構造函數(在創建類的實例時會調用該構造函數),就在矛盾自己。 要么在沒有實例的情況下定義它(在構造函數之外,並且是靜態的),要么使其特定於一個實例(在構造函數內部,而不是靜態的)。

您可能需要重新考慮您實際要做什么以及是否確實需要靜態變量。

暫無
暫無

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

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