
本文讲解在 java 中如何正确创建静态嵌套类(static nested class)的实例,重点解决外部类 a 中静态子类 b 和 c 的依赖关系与构造调用问题,并给出简洁、可运行的代码示例。
本文讲解在 java 中如何正确创建静态嵌套类(static nested class)的实例,重点解决外部类 a 中静态子类 b 和 c 的依赖关系与构造调用问题,并给出简洁、可运行的代码示例。
在 Java 中,static 嵌套类(如 A.B 和 A.C)不持有对外部类实例的隐式引用,因此可直接通过外部类名访问,无需先创建 A 的实例。但要注意:C 的构造器要求传入一个 B 类型参数,而 B 本身也是 A 的静态嵌套类,所以必须显式构造 A.B 实例。
正确的实例化方式如下:
assert new A.C(new A.B()).foo() == 42;
该语句分两步完成:
- new A.B():创建 A 的静态嵌套类 B 的实例;
- new A.C(...):将 B 实例传入 C 的构造器,创建 C 实例,并立即调用其 foo() 方法。
⚠️ 注意事项:
- 不可写作 A.C(new B()) 或 A.C(new B) —— B 不是独立顶层类,必须带外部类限定符 A.B;
- 不可省略 new A.B() 直接传 null(除非构造器允许),否则会因空指针导致运行时异常;
- A.B 和 A.C 均为 static 类,因此不依赖 A 的实例,new A() 完全不需要;
- 若 B 有非默认构造器,需按需传参;本例中 B 无显式构造器,编译器自动提供无参构造器。
完整可运行示例:
class A {
static class B {}
static class C {
B b;
C(B b) { this.b = b; }
int foo() { return 42; }
}
}
public class Exercise {
public static void main(String[] args) {
assert new A.C(new A.B()).foo() == 42; // ✅ 正确写法
System.out.println("Assertion passed.");
}
}
总结:静态嵌套类的使用遵循“类名限定 + 显式构造”原则。只要理清依赖链(C 依赖 B,二者均属 A 的静态成员),就能准确写出简洁、类型安全的实例化表达式。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











