[英]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.