java - 在Java中的非静态类中声明静态变量

标签 java variables static variable-declaration

我是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 section 8.1.3 :

Inner classes may not declare static members, unless they are constant variables (§4.12.4), or a compile-time error occurs.

其他使内部类静态化并访问它的方法

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);
    }
}

关于java - 在Java中的非静态类中声明静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41015440/

相关文章:

java - DozerBeanMapper : Ignore Null values from Source

java - OS X Mavericks JNI CallStaticVoidMethod 结果为 SIGSEGV/SIGBUS (Java 8)

variables - R中 "variable (number of points included)"移动平均值的高效计算

bash - 打印文件中的每 n 行

包含美元分隔变量的 Java 属性

java - 如何使用 Micrometer 正确跟踪 Hibernate 指标?

java - 将 PDF 评论提取为 HTML

c++ - 将 `static` 关键字与结构化绑定(bind)结合使用

c# - 用静态 C# 修改的 ThreadStatic

python - 函数中静态变量的 Python 等价物是什么?