MST

星途 面试题库

面试题:Java类实例化:内部类与实例化顺序

假设有一个外部类`Outer`,其中包含一个成员内部类`Inner`。在`Outer`类的实例化过程中,内部类`Inner`的实例化时机是怎样的?请通过代码展示,并说明如果内部类`Inner`有静态成员,其初始化又遵循什么规则。
30.9万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试
  1. 内部类Inner实例化时机
    • 成员内部类Inner的实例化依赖于外部类Outer的实例。只有先创建了外部类Outer的实例,才能创建成员内部类Inner的实例。
    • 以下是代码示例:
class Outer {
    class Inner {
        public void print() {
            System.out.println("This is Inner class.");
        }
    }

    public static void main(String[] args) {
        Outer outer = new Outer();
        Outer.Inner inner = outer.new Inner();
        inner.print();
    }
}
  • 在上述代码中,首先创建了Outer类的实例outer,然后通过outer.new Inner()创建了Inner类的实例inner。这表明只有在外部类实例化后,才能实例化其成员内部类。
  1. 内部类Inner静态成员初始化规则
    • 成员内部类不能有静态成员,除非该内部类是static修饰的静态内部类。
    • 对于静态内部类,其静态成员的初始化遵循与普通类静态成员相同的规则。即当类第一次被加载时,静态成员被初始化。
    • 以下是静态内部类包含静态成员的代码示例:
class OuterStatic {
    static class InnerStatic {
        static int staticVar = 10;

        public static void printStatic() {
            System.out.println("Static variable in InnerStatic: " + staticVar);
        }
    }

    public static void main(String[] args) {
        OuterStatic.InnerStatic.printStatic();
    }
}
  • 在上述代码中,InnerStaticOuterStatic的静态内部类,它包含静态变量staticVar和静态方法printStatic。当OuterStatic.InnerStatic.printStatic()被调用时,InnerStatic类被加载,其静态变量staticVar被初始化。