变量捕获相关内容

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

相关推荐
lsx2024061 分钟前
Bootstrap5 按钮组
开发语言
林涧泣4 分钟前
使用Java输出HelloWorld
java·开发语言
lsx2024069 分钟前
Perl 基础语法
开发语言
叫致寒吧16 分钟前
Dockerfile
java·spring cloud·eureka
IT北辰19 分钟前
用 Python 自动解析药品规格并计算包装总容量 —— pandas + 正则实战
开发语言·python·pandas
鸽鸽程序猿22 分钟前
【刷题册】三
java·刷题
ruleslol24 分钟前
java中调用uri请求的几种常见的方法
java
资生算法程序员_畅想家_剑魔25 分钟前
Java常见技术分享-10-装饰器模式
java·开发语言·装饰器模式
ss27326 分钟前
ThreadPoolExecutor七大核心参数:从源码看线程池的设计
java·数据库·算法
zzoood27 分钟前
【PHP】富文本编辑器图片自动追加域名
开发语言·php