问答详情
源自:7-7 Java 中的静态内部类

关于内部类静态成员的问题

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+"个奇迹");
		}
	}
}


提问者:慕标0097473 2016-10-30 10:40

个回答

  • weibo_丿横竖弯钩_04224973
    2016-10-30 11:09:35
    已采纳

    一般情况下,如果一个内部类不是被定义成静态内部类,那么在定义成员变量或者成员方法的时候, 是不能够被定义成静态成员变量与静态成员方法的。也就是说,在非静态内部类中不可以声明静态成员。如现在在一个student类中定义了一个内部类 age,如果没有将这个类利用static关键字修饰,即没有定义为静态类,那么在这个内部类中如果要利用static关键字来修饰某个成员方法或者成员 变量是不允许的。在编译的时候就通不过。

  • 四月天_
    2016-10-30 11:28:43

    会报错是因为你在非静态内部类中定义了静态变量。

  • 慕标0097473
    2016-10-30 11:11:48

    那为什么主函数main方法可以有static?

    public class A{//没有被staticz修饰。
        public static void main(String[]args){//有static修饰
        }
    }


  • 慕虎0511126
    2016-10-30 11:09:54

     new A().a();这段就有问题,只有静态内部类才能这样调用

  • 转折点1
    2016-10-30 11:05:51

    这样想,静态类或静态成员没有new之前就已经加载了,而普通类,只有new创建对象的时候才会加载,两者出现的先后顺序就有冲突