目录

一、方法局部变量的访问

1.生命周期

1.1方法生命周期

1.2匿名实例生命周期

1.3生命超时性

2.变量捕获

2.1按值捕获

2.1.1值捕获优势

2.1.1.1生命及时访问

2.1.1.2线程安全

2.1.2常量值捕获优势

2.2按引用捕获

引用捕获风险

(1)生命超时访问

(2)线程不安全

二、外部类成员变量的访问

1.生命周期

1.1非静态成员

1.2静态成员

1.3生命及时性

2.引用访问

2.1非静态匿名类的引用访问

2.2静态匿名类的引用访问

3.线程安全问题


一、方法局部变量的访问

1.生命周期

1.1方法生命周期

方法的生命周期 方法调用开始 到 方法的最后一行执行完结束

1.2匿名实例生命周期

匿名内部类创建的 实例对象的生命周期 取决于对象的引用情况

对象被创建后,其生命周期 就独立于 创建它们的方法,当实例对象引用 传递到其它线程或方法里 继续引用该对象时,即使创建方法的生命周期结束,销毁了它里面的 该实例对象的引用,实例对象 仍然可能在其它地方 被引用而继续存在生命周期可以比创建方法的生命周期

1.3生命超时性

匿名内部类 在方法里面 定义类结构,实例对象的生命周期 可能比 局部变量的生命周期长,代表着实例对象的匿名内部类 可能会生命超时地 悬空访问 方法局部变量


2.变量捕获

匿名内部类 在方法中进行 定义类结构与创建实例,在方法中定义类结构时,会将局部方法的变量 复制捕获进内部类结构中 作成员变量 进行访问

2.1按值捕获

Java的匿名内部类 捕获所在创建方法的局部变量时,只复制捕获 方法局部变量的 final常量/等效final变量的 常量值 到内部类 作为新增的副本成员保存

2.1.1值捕获优势
2.1.1.1生命及时访问

复制捕获值 入副本成员 避免了 创建方法局部变量的生命 可能更短提前销毁 而造成的悬空访问的问题

2.1.1.2线程安全

同时如果一个方法中 定义有许多线程的匿名内部类,每个内部类 将同个方法的局部变量复制到各自内部类里面的 独立副本成员中,就不会形成 并发修改 同一外部方法局部变量 而造成线程安全问题

2.1.2常量值捕获优势

复制捕获final常量值 入副本常量成员常量在内部无法修改,避免了在内部修改副本成员变量 而外部方法局部变量实际不会改变的 可能错乱对应问题


2.2按引用捕获

C++的Lambda表达式捕获变量时,可以复制捕获 变量引用 入副本成员引用变量

引用捕获风险
(1)生命超时访问

在Lambda表达式内部 就能引用修改外部变量,要确保 实例对象的生命周期 最好不要超过 局部变量的作用域,可以通过延长局部变量生命周期 或限制Lambda不能访问已销毁的局部变量 来避免悬空引用问题

(2)线程不安全

当函数中定义多个 线程的匿名内部类时,要用同步机制 确保 多线程并发修改共同局部变量的 线程安全


二、外部类成员变量的访问

1.生命周期

1.1非静态成员

匿名内部类实例存在时,其内部就存储着 外部类的this引用,外部类就不可能被销毁生命周期安全地 访问外部类所有成员

1.2静态成员

关于类的实例还在,类就不会被卸载,匿名内部类实例的生命周期 一定小于 外部类的生命周期,生命周期安全地 访问外部类的静态成员

1.3生命及时性

外部类成员变量的生命周期 一定比 匿名内部类实例的生命周期,代表着实例对象的匿名内部类 一定生命及时地 安全访问 外部类的成员变量


2.引用访问

外部类成员变量的生命周期 一定比匿名内部类实例的生命周期长,所以就不使用 复制捕获变量访问,选择直接引用访问

2.1非静态匿名类的引用访问

在持有外部类实例引用的 非静态方法里面 定义匿名内部类的 类结构,内部类持有 外部类实例对的 this引用,可以访问外部类的所有成员

2.2静态匿名类的引用访问

静态方法里面 定义匿名内部类的 类结构,内部类只能访问外部类的静态成员


3.线程安全问题

多个匿名线程 并发访问同一成员变量时 有线程安全问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/90484.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/90484.shtml
英文地址,请注明出处:http://en.pswp.cn/web/90484.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LinkedList的模拟实现+LinkedList和ArrayList的区别

目录 LinkedList的模拟实现 什么是双向链表 增加数据 头插法: 尾插法: 指定的下标插入: 删除数据 删除双向链表中出现的第一个key 置空所有数据 LinkedList和ArrayList的区别 顺序表对应的集合类是ArrayList;链表对应的集…

Vue + WebSocket 实时数据可视化实战:多源融合与模拟数据双模式设计

在现代交通大屏项目中,实时数据的采集和可视化尤为重要。本文结合 Vue3 和 ECharts,分享一个支持多 WebSocket 数据源实时合并、模拟数据调试、自动重连的完整设计方案,帮助你快速搭建健壮的数据可视化组件。一、项目背景与核心需求实时接收多…

C#索引器、接口、泛型

以下是对提供的 C# 代码中涉及的核心知识点的梳理和总结,涵盖索引器、接口、泛型三大核心内容,以及相关实践要点:一、索引器(Indexer)索引器是一种允许类或结构体像数组一样通过[]语法访问成员的特殊成员,本…

界面组件DevExpress WPF中文教程:Grid - 如何过滤节点?

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

Excel——INDEX和MATCH傻傻分不清?

核心逻辑​先用 MATCH 找到目标姓名在表格中的 ​行号,再用 INDEX 根据行号 ​提取对应信息。就像查字典:先用拼音找到字的页码(MATCH 找行号)再翻到该页看具体解释(INDEX 取数据)​分步拆解(以…

制造业低代码平台实战评测:简道云、钉钉宜搭、华为云Astro、金蝶云·苍穹、斑斑低代码,谁更值得选?

上回聊了斑斑和简道云,不少同行私信问我其他几个低代码平台怎么样,今天就给大家来个"五大门派"终极对决! 一、先说痛点 制造业搞数字化最怕三件事: 1.钱花了没效果(大平台用不起,小工具不够用&…

Jenkins中HTML文件显示样式问题解决方案

Jenkins中HTML文件显示样式问题解决方案 问题描述 在Jenkins中归档的HTML文件显示格式失效,样式无法正常显示,但在本地浏览器中打开却能正常显示。 问题原因 Jenkins为了安全考虑,默认设置了严格的内容安全策略(Content Security Policy, CSP…

四、配置文件

文章目录1. 文件类型1.1 properties1.2 yaml1.2.1 简介1.2.2 基本语法1.2.3 数据类型1.2.4 示例2. 配置提示1. 文件类型 1.1 properties 同以前的properties的用法 1.2 yaml 1.2.1 简介 YAML 是 “YAML Ain’t Markup Language”(YAML 不是一种标记语言&#x…

Python常用医疗AI库以及案例解析(场景化进阶版)

📊 框架应用拓扑图用例 #mermaid-svg-lZ1J5KCaVWBV2kAu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-lZ1J5KCaVWBV2kAu .error-icon{fill:#552222;}#mermaid-svg-lZ1J5KCaVWBV2kAu .error-text{fill:#552222;st…

Python高效操作Kafka实战指南

Python操作Kafka的高效 以下是使用Python操作Kafka的高效消息发送实例,涵盖基础发送、批量处理、异步回调等场景。示例基于confluent-kafka库(推荐)和kafka-python库,代码均经过实测。 流程图 基础消息发送(同步) from confluent_kafka import Producerproducer = Pro…

离线快速处理PDF格式转化的方案

日常办公中,PDF 几乎成了我们离不开的文件格式。然而像 WPS 这样的工具,不少实用功能都需要额外付费才能解锁。它的打开方式很简单,双击桌面图标即可运行。它不会弹出主界面,而是默默驻留在系统托盘区,需要时双击图标就…

SpringMVC注解与SpringCloudOpenFeign注解对比

1. 背景知识 梳理SpringMVC和SpringCloudOpenFeign常用注解后: Spring MVC中常用注解_笔记-CSDN博客Spring Cloud OpenFeign 常用注解_笔记-CSDN博客 这里对两类注解做个对比。理解两者定位(服务端 vs 客户端)是掌握注解使用的关键&#x…

Linux 时间同步的流程

一、问题时间RTC时间、系统时间(UTC)和本地时间的关系如下:‌RTC时间‌(硬件时钟):显示为UTC时间格式:02:50:35/02:51:28由主板电池供电,独立于系统运行‌12通常存储UTC时间(Linux默认配置&…

VSCode——python选择解释器消失的解决办法

VSCode软件的左下角 设置——检查更新:

笛卡尔积规避:JOIN条件完整性检查要点

笛卡尔积是数据库查询中的高风险操作,多表JOIN时缺失有效关联条件会导致结果集指数级膨胀,引发‌性能塌方‌甚至系统崩溃‌。以下是核心检查策略及防御方案:一、笛卡尔积的致命影响‌‌性能塌方‌百万级订单表与千万级用户表缺失ON条件时&…

Vimba相机二次开发教程,基于Python

文章目录安装获取图像辅助数据Vimba 是由 Allied Vision 开发的一套软件开发套件(SDK),主要用于控制和操作其工业相机产品。它提供了一套完整的 API 和工具,支持多种操作系统和编程语言,便于开发者快速集成相机功能到应…

电子测试行业软件ATECLOUD与ETEST对比分析-纳米软件

在当今科技飞速发展的时代,电测行业对于自动化测试平台的依赖程度日益加深。高效、精准的自动化测试平台不仅能够提升测试效率,还能确保产品质量。ATECLOUD 与 ETEST 作为电测行业中颇受瞩目的自动化测试平台,各自展现出独特的优势与特点。下…

自动化测试中的常见测试方法

自动化测试中的常见测试方法在自动化测试中,除了数据驱动(Data-Driven Testing),还有多种主流方法,每种方法适用于不同场景和需求。以下是常见的自动化测试方法分类及详解:一、关键字驱动测试(K…

口语01-don‘t judge a book by its cover

Dont judge a book by its cover 不要以貌取人1 the most advanced thing2 stack3 right4 frantically5 be annoyed with sb6 Get your stuff off my desk7 But today I came to class and was running a few minutes late.8 take my seat:占我座位 / 坐我的位置9 s…

《Uniapp-Vue 3-TS 实战开发》自定义预约时间段组件

这个组件可以直接在 uniapp 项目中使用,提供了 24 小时时段选择功能,支持单选 / 多选、预设时段选择、随机选择等功能。 html版本: <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="vi…