[英]Declaring a static variable in a non-static class in Java
我是java的新手。 我目前正在閱讀一些關於靜態變量的文章。 當我試圖實現我的學習時,我遇到了關於靜態變量的問題。 這是第一個代碼示例。
public class Human {
// in Human.java
public static int population = 0;
public static void main(String[] argv) {
System.out.println(population);
}
}
此代碼工作正常,結果為0.但對於以下代碼,我不允許編譯它。
public class Human {
// in Human.java
public class Charlie extends Human {
public static int number = 0;
}
public static void main(String[] argv) {
System.out.println(new Human().new Charlie().number);
}
}
發生錯誤:除非使用常量表達式初始化,否則不能在非靜態內部類型中將字段編號聲明為靜態
我對這種情況很困惑。 對於第一個代碼示例,我的Human類是非靜態的,我被允許在其中聲明一個靜態變量。 為什么我不能為我的第二個代碼示例做同樣的事情。
任何幫助,將不勝感激。 謝謝。 :)
嘗試使用public static final int number = 0;
因為Java不允許您在函數本地內部類中定義非最終靜態字段。 只允許頂級類和靜態嵌套類具有非最終靜態字段。
從JLS第8.1.3節 :
內部類可能不會聲明靜態成員,除非它們是常量變量(第4.12.4節),否則會發生編譯時錯誤。
使內部類靜態並訪問它的其他方法
public class Human {
// in Human.java
public static class Charlie extends Human {
public static int number = 0;
}
public static void main(String[] argv) {
System.out.println(new Human.Charlie().number);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.