局部内部类必须定义在方法、构造器或代码块内,不可在成员位置;无访问修饰符和static修饰,仅限当前作用域使用,可访问外部类所有成员及所在方法的final或effectively final局部变量。

局部内部类的定义位置和基本写法
局部内部类必须写在方法、构造器或代码块的内部,不能出现在类的成员位置。它没有访问修饰符(如 public 或 private),也不能用 static 修饰。定义后只能在当前作用域内使用。
- 类名合法,但编译后生成类似 Outer$1.class 的编号文件,无正式类名
- 不能被方法外的任何代码引用或实例化
- 语法上就是普通类定义,只是嵌套在方法大括号里
能访问哪些外部元素
局部内部类可以访问:
- 外部类的所有成员(包括私有字段和方法)
- 所在方法的参数和局部变量,但这些变量必须是 final 或 effectively final(Java 8 起放宽限制,语义不变)
注意:所谓“访问”,其实是编译器把变量值复制进内部类的私有字段,并在构造时传入——不是实时读取原始变量。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
典型使用方式和注意事项
定义后需在同方法内完成声明、实例化和调用:
- 必须在定义之后才能 new 实例,不能提前
- 可定义多个方法、实现接口、继承父类,比匿名类更灵活
- 不能定义静态成员(除 static final 常量)
- 生命周期绑定该方法执行期,方法结束即不可再访问
和匿名内部类、Lambda 的区别
三者都适合封装临时逻辑,但适用场景不同:
- 局部内部类:有名字、可复用多次、支持多方法和字段,适合稍复杂行为
- 匿名内部类:无名、只能用一次、必须基于已有类型(类/接口),适合简单回调
- Lambda:仅限函数式接口、不能捕获非 final 变量、不能定义状态,适合极简函数传递
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










