变量捕获相关内容

变量捕获是匿名内部类和 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

相关推荐
断眉的派大星4 分钟前
# Python 魔术方法(魔法方法)超详细讲解
开发语言·python
2501_933329557 分钟前
技术深度拆解:Infoseek舆情处置系统的全链路架构与核心实现
开发语言·人工智能·自然语言处理·架构
妮妮喔妮10 分钟前
supabase的webhook报错
开发语言·前端·javascript
我的xiaodoujiao11 分钟前
API 接口自动化测试详细图文教程学习系列11--Requests模块3--测试练习
开发语言·python·学习·测试工具·pytest
疯狂成瘾者16 分钟前
YAML配置介绍
java
cccccc语言我来了17 分钟前
C++轻量级消息队列服务器
java·服务器·c++
Polar__Star17 分钟前
C#怎么使用并发集合 C#ConcurrentDictionary和ConcurrentQueue线程安全集合怎么用【进阶】
jvm·数据库·python
better_liang22 分钟前
每日Java面试场景题知识点之-MCP协议在Java开发中的应用实践
java·spring boot·ai·mcp·企业级开发
河阿里22 分钟前
SpringBoot :使用 @Configuration 集中管理 Bean
java·spring boot·spring
xiaoshuaishuai822 分钟前
C# Codex 脚本编写
java·服务器·数据库·c#