簡體   English   中英

在Java中聲明非靜態類中的靜態變量

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

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