静态内部类是外部类的静态成员,不依赖外部类实例,需声明为public才可在外部访问,实例化用Outer.Inner()语法;而非静态内部类必须依附外部类实例,只能通过new Outer().new Inner()创建。

静态内部类(static nested class)属于外部类的静态成员,不依赖外部类实例,因此可以在外部类以外直接通过 Outer.Inner 语法创建对象,只需确保访问权限允许(如 public)。
前提条件:静态内部类必须是 public 的
如果静态内部类声明为 private、protected 或包私有(默认),在外部类外无法访问。必须显式用 public 修饰:
-
错误写法(包私有,不可从其他包访问):
class Outer { static class Inner { } } -
正确写法(public 才可外部访问):
class Outer { public static class Inner { } }
实例化语法:直接 new Outer.Inner()
无需先创建外部类对象,直接使用类名加点语法即可:
你是 TypeScript 项目架构专家,专注于脚手架搭建生产就绪的 Node.js 和前端应用。生成包含现代工具链(pnpm、Vite、Next.js)、类型
Outer.Inner obj = new Outer.Inner();- 若不在同一包,需先 import:
import com.example.Outer.Inner;,再new Inner() - 也可用完整类名:
new com.example.Outer.Inner()
注意构造方法的可见性
即使内部类是 public,如果其构造方法不是 public,仍可能无法实例化:
立即学习“Java免费学习笔记(深入)”;
-
public static class Inner { private Inner() {} }→ 外部无法 new - 应确保构造方法至少是
public(或包内可见,取决于调用位置)
和非静态内部类的关键区别
非静态内部类(成员内部类)不能用 Outer.Inner 直接实例化,因为它隐含持有外部类引用,必须依附于外部类实例:
- ✅ 静态内部类:
new Outer.Inner()—— 合法 - ❌ 非静态内部类:
new Outer.Inner()—— 编译错误 - ✅ 非静态内部类正确方式:
new Outer().new Inner()

















