java内部类是定义在外部类内部的嵌套类,分为成员、静态、局部、匿名四种类型;成员内部类依赖外部类实例且可访问其所有成员,静态内部类仅访问静态成员,局部与匿名类作用域受限,常用于回调等场景。

Java 中内部类不能像普通类那样在外层类中“声明”为字段或方法参数,它本质上是外层类的成员(类似字段或方法),需定义在类体内部;实例化则必须依托外层类实例(静态内部类除外)。
内部类的声明位置与语法
内部类必须定义在外层类的大括号 {} 内部,不能出现在方法、代码块或类外部。常见类型有四种,声明方式略有不同:
-
成员内部类(非静态):直接写在类中,不加
static,可访问外层类所有成员(包括 private) -
静态内部类:用
static修饰,只能访问外层类的静态成员 - 局部内部类:定义在方法、构造器或初始化块内,作用域仅限该区域
- 匿名内部类:没有类名,通常用于实现接口或继承类,直接 new + 大括号定义
成员内部类的实例化方式
非静态内部类依赖外层类实例,必须先创建外层类对象,再通过该对象创建内部类实例:
Outer outer = new Outer();<br>Outer.Inner inner = outer.new Inner(); // 注意语法:outer.new Inner()
也可以链式写成:new Outer().new Inner(),但要注意外层实例生命周期。
静态内部类的实例化方式
静态内部类不依赖外层实例,可直接通过外层类名访问:
Outer.StaticInner staticInner = new Outer.StaticInner();
等价于调用静态成员,无需先创建 Outer 实例。
局部与匿名内部类的使用场景
局部内部类一般在方法内定义并立即使用,无法从方法外访问;匿名内部类常用于事件监听、线程启动等一次性场景:
new Thread(new Runnable() {<br> public void run() { System.out.println("Hello"); }<br>}).start();
Java 8+ 可简化为 Lambda 表达式(前提是接口只有一个抽象方法)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











