在 Java 中的非静态 class 中声明静态变量
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 class 是非静态的,我可以在其中声明一个静态变量。为什么我不能对我的第二个代码示例执行相同的操作。
如有任何帮助,我们将不胜感激。谢谢。 :)
尝试使用 public static final int number = 0;
,因为 Java 不允许您在局部函数内部 classes 中定义非最终静态字段。仅顶级 classes 和静态嵌套 classes 允许具有非最终静态字段。
Inner classes may not declare static members, unless they are constant variables (§4.12.4), or a compile-time error occurs.
使内部 class 静态并访问它的其他方法
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 的新手。我目前正在阅读一些有关静态变量的文章。当我尝试实施我的学习时,我遇到了一个关于静态变量的问题。这是第一个代码示例。
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 class 是非静态的,我可以在其中声明一个静态变量。为什么我不能对我的第二个代码示例执行相同的操作。
如有任何帮助,我们将不胜感激。谢谢。 :)
尝试使用 public static final int number = 0;
,因为 Java 不允许您在局部函数内部 classes 中定义非最终静态字段。仅顶级 classes 和静态嵌套 classes 允许具有非最终静态字段。
Inner classes may not declare static members, unless they are constant variables (§4.12.4), or a compile-time error occurs.
使内部 class 静态并访问它的其他方法
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);
}
}