为什么内部类有静态成员那么内部类必须是静态的呢?
class Outer
{
int x = 3;
void method()
{
class Inner
{
void function() // 这个如果是静态的,Inner也必须是静态的吗?
{
System.out.println(x);
}
}
new Inner().function();
}
}
为什么必须是静态的啊?
------解决方案--------------------如果不牵扯到内部类,我想楼主应该很清楚为什么静态方法只能访问静态成员了,运到这个问题,我一开始也不太明白,经过一段时间的学习和思考,现在很容易明白了,给日楼主分享一个思路吧
1.内部类是外部类的一个成员,可以等同于外部类的一个属性或者方法。
2.非静态的内部类是外部类对象的一个成员,必须先有外部类的对象才有这个内部类,它是属于对象的。
3.内部类的静态成员不属于对象的,也就是类在加载的时候就存在了,那么这就发生冲突了,也就是说外部类还没有new对象前,这个内部类是不存在的,而这个内部类的静态成员就存在了,这就好比没有鸡就先有鸡蛋一样。
不知道我讲清楚没,祝楼主学习进步
------解决方案--------------------java类加载顺序:
首先加载类
执行static变量初始化
接下来执行对象的创建
如果楼主要执行代码中的function方法(静态),那么必须先执行加载Outer,再加载Inner,然后执行function方法,问题就出在加载Inner上面,可以把Inner看成Outer的非静态成员,它的初始化必须在外部类对象创建后以后进行,要加载Inner必须在实例化Outer之后完成,java虚拟机要求所有的静态变量和方法必须在对象创建之前完成,这样便产生了矛盾。
希望对楼主有帮助。