为了账号安全,请及时绑定邮箱和手机立即绑定

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

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


正在回答

5 回答

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

2 回复 有任何疑惑可以回复我~
#1

慕标0097473 提问者

非常感谢!
2016-10-30 回复 有任何疑惑可以回复我~

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

1 回复 有任何疑惑可以回复我~

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

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


0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

2 回复 有任何疑惑可以回复我~
#1

袁初

完全同意! 给个链接,感觉讲得不错 http://blog.csdn.net/zhifengsun/article/details/19479383
2016-12-09 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信