变量捕获相关内容

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

相关推荐
Aric_Jones1 分钟前
idea使用.env运行SpringBoot项目
java·spring boot·intellij-idea
nbsaas-boot4 分钟前
软件开发最核心的理念:接口化与组件化
开发语言
刘一说7 分钟前
Java 中实现多租户架构:数据隔离策略与实践指南
java·oracle·架构
lsx2024067 分钟前
Java 对象概述
开发语言
Mr_Xuhhh10 分钟前
C++11实现线程池
开发语言·c++·算法
beata13 分钟前
Java基础-9:深入 Java 虚拟机(JVM):从底层源码到核心原理的全面解析
java·后端
无水先生13 分钟前
python函数的参数管理(01)*args和**kwargs
开发语言·python
py小王子15 分钟前
dy评论数据爬取实战:基于DrissionPage的自动化采集方案
大数据·开发语言·python·毕业设计
小陶的学习笔记21 分钟前
python~基础
开发语言·python·学习
SimonKing23 分钟前
分享一款可以管理本地端口的IDEA插件:Port Manager
java·后端·程序员