Java:Java不允许在非静态内部类里定义静态成员?这是为什么呢?
非静态内部类的实例是依附于外部类的实例没错,但是静态成员的话无论是外部类的静态成员还是非静态内部类的静态成员不是都可以在类加载时初始化么?求解,为什么说Java不允许在非...
非静态内部类的实例是依附于外部类的实例没错,但是静态成员的话无论是外部类的静态成员还是非静态内部类的静态成员不是都可以在类加载时初始化么?
求解,为什么说Java不允许在非静态内部类里定义静态成员
public class InnerNoStatic // 外部类
{
private class InnerClass // 非静态内部类
{
static // 非法
{
System.out.println("==========");
}
private static int inProp; // 非法
private static void test(){} // 非法
}
}
找到原因了:
1、既然是非静态内部类,说明该类只被包含它的那个外部类使用,是专用的,所以定义成静态的没有意义
2、Java的装载过程是先加载类,然后初始化静态元素(Java编译器会使所有的静态元素在使用前被分配好内存空间)然后非静态的只有在使用的时候才分配内存空间,而内部类是作为外部类的成员存在的,所以非静态的内部类必须等到外部类实例化后才会存在,所以非静态内部类的静态成员(如果合法的话)在类加载时并没有被初始化,这与Java的编译原则相违背,但如果内部类是静态内部类,则其中可以定义静态元素。 展开
求解,为什么说Java不允许在非静态内部类里定义静态成员
public class InnerNoStatic // 外部类
{
private class InnerClass // 非静态内部类
{
static // 非法
{
System.out.println("==========");
}
private static int inProp; // 非法
private static void test(){} // 非法
}
}
找到原因了:
1、既然是非静态内部类,说明该类只被包含它的那个外部类使用,是专用的,所以定义成静态的没有意义
2、Java的装载过程是先加载类,然后初始化静态元素(Java编译器会使所有的静态元素在使用前被分配好内存空间)然后非静态的只有在使用的时候才分配内存空间,而内部类是作为外部类的成员存在的,所以非静态的内部类必须等到外部类实例化后才会存在,所以非静态内部类的静态成员(如果合法的话)在类加载时并没有被初始化,这与Java的编译原则相违背,但如果内部类是静态内部类,则其中可以定义静态元素。 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询