变量捕获相关内容

变量捕获是匿名内部类和 Lambda 表达式中的一个重要概念,指的是内部代码块访问外部作用域中变量的机制。

1.变量捕获的原理:

为什么需要 final

生命周期问题:

  • 局部变量在方法执行结束后就销毁了
  • 但匿名内部类对象可能还在运行(比如在另外一个线程中)
  • 为了保证内部类能正常访问已经销毁的变量,Java 采用值拷贝方式
java 复制代码
​
public void understandWhyFinal() {
    int count = 0; // 栈上的局部变量
    
    Runnable task = new Runnable() {
        private int capturedCount = count; // 🔥 Java 在背后做的:值拷贝
        
        @Override
        public void run() {
            System.out.println(capturedCount); // 访问的是拷贝的值
        }
    };
    
    count = 100; // 修改原变量
    // 但 task 中捕获的仍然是 0(拷贝时的值)
    
    new Thread(task).start(); // 输出: 0
}

​

如果允许修改会产生数据不一致的问题,所有 Java 强制要求 final

相关推荐
AAA大运重卡何师傅(专跑国道)18 小时前
【无标题】
开发语言·c#
XBodhi.18 小时前
Visual Studio C++ 语法错误: 缺少“;”(在“return”的前面)
开发语言·c++·visual studio
LSssT.19 小时前
【01】Python 机器学习
开发语言·python
心之伊始19 小时前
Java 后端接入大模型:从 Token、并发到推理成本的完整估算方法
java·spring boot·性能优化·大模型·llm
l1t20 小时前
DeepSeek总结的使用实体-组件-系统和基于存在性处理进行Python编程39-40
开发语言·python
BlackTurn20 小时前
技术经理投标
java
曾阿伦20 小时前
Python 搭建简易HTTP服务
开发语言·python·http
YG亲测源码屋20 小时前
java配置环境变量、jdk环境变量配置、java环境变量设置方法
java·开发语言
MIUMIUKK20 小时前
从语法层面,看懂 Python 的特殊处
java·开发语言·python
FlyWIHTSKY20 小时前
TS、TSX、JS、JSX 文件扩展名详解
开发语言·javascript·ecmascript