静态内部类可直接访问外部类所有静态成员(含private static),无需对象引用;但不能访问任何非静态成员,重名时需用Outer.name显式调用,模块系统不影响该访问规则。

静态内部类可以直接访问外部类的所有静态成员,包括 private static 字段和方法,无需任何额外语法或对象引用。
能直接访问哪些静态成员
只要被声明为 static,无论访问修饰符是 public、protected、包级(default)还是 private,静态内部类都能直接使用名称访问:
-
private static int count = 10;→ 可直接写count++ -
protected static void log() { }→ 可直接调用log() -
public static final String VERSION = "2.0";→ 可直接引用VERSION
重名时如何区分
当静态内部类自身也定义了同名静态成员,会优先使用本类的。要明确调用外部类的,需加类名限定:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 外部类有
private static String name = "outer"; - 内部类也有
private static String name = "inner"; -
System.out.println(name);输出"inner" -
System.out.println(Outer.name);输出"outer"
不能访问什么
静态内部类无法绕过限制去访问外部类的非静态内容:
立即学习“Java免费学习笔记(深入)”;
- 实例字段(如
private String data;)→ 编译报错 - 实例方法(如
void process() { })→ 编译报错 - 构造器、
this、super等与实例绑定的关键字 → 语法不合法
模块化环境下的注意事项
Java 9+ 模块系统不影响访问规则,但影响类可见性:
- 若外部类所在包未在
module-info.java中exports,其他模块连new Outer.StaticInner()都会失败 - 静态内部类本身必须是
public才能被跨模块使用 - 不需要额外配置
opens或requires来解决静态成员访问问题

















