2025.6.4
静态内部类(Static Nested Class)
静态内部类是Java中一种特殊的嵌套类,具有以下特点:
基本概念
- 定义位置:定义在另一个类的内部,并用
static关键字修饰 - 访问权限:可以像普通类一样有public、protected、默认或private修饰符
- 实例化:可以直接通过外部类名实例化,不需要先创建外部类实例
主要特性
-
不依赖外部类实例:
- 静态内部类不持有对外部类实例的隐式引用
- 可以直接创建静态内部类对象,无需先创建外部类对象
-
访问权限:
- 可以访问外部类的所有静态成员(包括private静态成员)
- 不能直接访问外部类的非静态成员(因为没有外部类实例)
-
独立性:
- 静态内部类与普通类几乎相同,只是定义在另一个类内部
- 可以有静态成员和非静态成员
示例代码
public class OuterClass {
private static String staticField = "Static Field";
private String instanceField = "Instance Field";
public static class StaticNestedClass {
public void print() {
System.out.println(staticField); // 可以访问外部类的静态成员
// System.out.println(instanceField); // 错误!不能访问外部类的非静态成员
}
}
}
// 使用方式
OuterClass.StaticNestedClass nested = new OuterClass.StaticNestedClass();
nested.print();
与普通内部类的区别
-
实例化方式不同:
- 普通内部类:需要先有外部类实例
OuterClass outer = new OuterClass(); OuterClass.InnerClass inner = outer.new InnerClass(); - 静态内部类:直接实例化
new OuterClass.StaticNestedClass()
- 普通内部类:需要先有外部类实例
-
内存占用:
- 普通内部类持有对外部类实例的引用
- 静态内部类不持有这种引用
-
访问权限:
- 普通内部类可以访问外部类的所有成员
- 静态内部类只能访问外部类的静态成员
典型应用场景
- 当内部类不需要访问外部类实例成员时
- 创建与外部类相关联但独立存在的工具类
- 在集合类中常用(如Map.Entry通常实现为静态内部类)
静态内部类提供了一种逻辑分组的方式,同时避免了不必要的对象引用,有助于内存管理和性能优化。

浙公网安备 33010602011771号