public class StatiClass { static int age=100; private int c=89; public static void main(String[] args) { StatiClass o=new StatiClass(); System.out.println(o.c); new A().a(); } public class A{//这个地方会报错,请问为什么内部内中有静态成员,内部类就一定得是静态修饰的类? static int age=100; String name="张三"; public void a(){ System.out.println(name+"会活到"+age+"岁,那时候是"+StatiClass.age+"个奇迹"); } } }
一般情况下,如果一个内部类不是被定义成静态内部类,那么在定义成员变量或者成员方法的时候, 是不能够被定义成静态成员变量与静态成员方法的。也就是说,在非静态内部类中不可以声明静态成员。如现在在一个student类中定义了一个内部类 age,如果没有将这个类利用static关键字修饰,即没有定义为静态类,那么在这个内部类中如果要利用static关键字来修饰某个成员方法或者成员 变量是不允许的。在编译的时候就通不过。
会报错是因为你在非静态内部类中定义了静态变量。
那为什么主函数main方法可以有static?
public class A{//没有被staticz修饰。 public static void main(String[]args){//有static修饰 } }
new A().a();这段就有问题,只有静态内部类才能这样调用
这样想,静态类或静态成员没有new之前就已经加载了,而普通类,只有new创建对象的时候才会加载,两者出现的先后顺序就有冲突