java内部类引用外部变量

微信小程序|基于小程序+云开发制作一个菜谱小程序 今天吃什么?这是一个让强迫症左右为难的问题,跟随此文基于小程序+云开发制作一个菜谱小程序,根据现有食材一键生成菜谱,省心又省力。 阅读详情

今天学习AQS时,发现在main方法中实例一个ReentrantLock,在线程内部类能够直接使用,当时就很奇怪,因为按照自己的理解,想要使用外部的变量,一般都是通过类的方法传递。
后来查了下资料,方法中的内部类是可以直接使用外部变量的。

但是有个前提就是该变量必须是final或者effectively final的。
effectively final就是指变量初始化后没有被更改。
对于基础数据类型,就是值不能被更改。
对于引用类型,就是指向不能更改。
也就是说我们可以在内部类直接使用lock,但是不能更改lock的引用指向。

main{
ReentrantLock lock =new ReentrantLock();
        Runnable runnable = new Runnable() {

            @Override
            public void run() {
                    lock.lock();
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };
        Thread test = new Thread(runnable);
        test.start();
        lock=null;//出现编译错误
}

同理使用Integer 在内部类中 加减一样出错,因为缓存的原因。

后面又想到一个问题。
如果主线程结束了,还能使用lock吗?
在此之前,我已经使用了sout的方法分别在主线程和其他线程里打印了这个lock。发现是同一个lock。也就是指向相同。

主线程结束后,lock在主线程的栈中已经消失了,那么为什么另外一个线程还能使用呢?
后来查询资料,是第二个线程复制了一份引用在自己的线程栈中,这样就算主线程的引用销毁,但是子线程还能用。

NLTK中WordNet与同义词处理 通过本教程,学习了如何使用NLTK中的WordNet进行自然语言处理任务。首先介绍了WordNet的基本概念及其在NLTK中的集成使用,接着讲解了如何查找同义词、反义词等词汇关系,并结合实际应用演示了语义相似性计算。这些技能在文本分析、情感分析、信息检索等场景中有广泛应用,可以帮助开发者构建更智能的自然语言处理系统。掌握这些基本操作后,可以进一步探索WordNet的其他高级功能,结合其他NLTK工具进行更复杂的语言分析。 阅读详情

相关推荐

GD32单片机引脚复用指南:如何让JTAG接口的PA15/PB3发挥第二功能?

本文详细介绍了GD32F103Cx系列单片机如何通过AFIO模块进行引脚复用,特别是将默认用于JTAG调试接口的PA15、PB3等引脚释放为普通IO或复用功能引脚。文章从原理出发,结合代码实践,讲解了如何配置调试端口重映射,将JTAG引脚安全地转换为GPIO或定时器通道,并提供了常见问题排查与最佳实践,帮助开发者高效利用有限的引脚资源。

nept的博客 809

浅谈Java内部类及变量的调用

说到Java的内部类大致分为以下四种:成员内部类、局部内部类、匿名内部类、静态内部类。 这次我们先谈谈最为简单的成员内部类 首先,成员内部类是直接定义在另一个类中(与成员并列),它可以用所有的修饰符修饰。 这里有一个Father类,里面有定义的一个成员内部类Son public class Father { private String fatherName = "父亲"; public int age = 40; protected int money; ...

weixin_53122091的博客 1925

电子产品的老化测试有哪些类型?

因此,越来越多的人在寻找“已知合格的测试连接器”,即经过测试具有可靠性和有效性的测试连接器,可以在老化测试中制定优化方法。例如对于芯片来说,不同的封装有不同的老化测试座,QFP老化测试座,QFN老化测试座等。老化测试时,专用老化电路板上的元件将承受等于或高于其额定工作条件的压力,以消除任何在额定寿命之前过早失效的元件。静态老化:在此类系统中,将测试设备安装到老化板上的插座中,然后放入老化箱中,其中每隔12至24小时施加电源和高温。动态老化:在动态老化系统中,设备以老化速度设定的最大速率进行测试。

软件技术的专栏 1839

Java内部类

Java 内部类是定义在其他类内部的类,具有一些特殊的特性和用途。以下是 Java 内部类的主要特性和使用。内部类可以增加封装性、组织性和代码复用性。它们允许将相关的类放在一起,并隐藏一些实现细节。总之,Java 内部类提供了一种将类组织在一起的机制,以及在某些情况下实现更优雅和灵活的设计。使用内部类时,需要根据具体需求选择不同类型的内部类,并理解它们的特性和限制。

qq_25775675的博客 1232

在MATLAB产生正态(Gauss)分布随机数

在 MATLAB 中内置了有产生标准正态(Gauss)分布的随机数函数,使用方法如下: 其中 为产生矩阵的行数和列数, 为产生矩阵的个数,产生的矩阵中的每个元素均为服从 N(0,1)N(0, 1)N(0,1) 的标准正态分布的元素。使用如下命令产生一个 的服从的随机数矩阵: 绘制图像效果如下: 可以看到这里随机数服从 的标准正态分布。假设 X∼N(0,1)X\sim N(0,1)X∼N(0,1),则 3X+33X+33X+3 服从 N(3,9)N(3,9)N(3,9) 分布,因此我们要产生服从 N(

程序必须为人类阅读而编写,并且仅仅碰巧可以让机器执行 3万+

Mamba SSM 实战:IMDb 文本分类 + Mamba-ssm 全流程

Mamba SSM 文本分类链路:IMDb 二分类 → MambaLMHeadModel (d_model=256, n_layer=8, d_state=16, exp2=2) → 末 token 分类头。5 epoch 达 89.2% 准确率 (与 BERT-base 持平), 但显存降低 44% (3.5GB vs 6.2GB)。建议序列长度 ≥ 1024 再选 Mamba, 短序列 (< 512) 用 BERT 更高效。扩展时注意d_state。

m0_71589036的博客 57

内部类调用的外部变量必须是final修饰

内部类调用的外部变量必须是final修饰的, java1.8之后,在局部变量没有重新赋值的情况下,它默认局部变量为final型,认为你只是忘记加final声明了而已。如果你重新给局部变量改变了值或引用,那就无法默认为final了,就会报错. 为了解决:局部变量的生命周期与局部内部类的对象的生命周期的不一致性问题 ...

qq_40602312的博客 482

51单片机+DS18B20+数码管显示+超温提示+Proteus仿真

51单片机+DS18B20+数码管显示+超温提示+Proteus仿真 Proteus仿真 实例代码 #include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit we1 = P3^0; sbit we2 = P3^1; sbit we3 = P3^2; sbit we4 = P3^3; sbit DS = P1^0; sbit D1 = P3^6; sbit D2 = P3^7; uch

perseverance51博客 1540

JAVA面向对象-成员内部类与外部类的访问方式

当成员内部类声明为static是就变成了静态内部类了,那么创建静态内部类的格式为Outer.Inner inner = new Outer.new Inner();1.在外部类的成员函数中创建内部类的对象,通过内部类对象直接访问内部类的成员。成员内部类的优势:成员内部类作为外部类的成员,那么可以访问外部类的任意成员。编译异常分析:外部类需要访问内部类的属性时,需要创建内部类的对象访问。2.外部类需要访问内部类的成员属性时需要创建内部类的对象。1.内部类可以直接访问外部类的成员属性。外部类访问内部类的属性。

weixin_46969393的博客 1643

携程滑块、点选验证码登录识别逆向

本文分析了携程登录系统的风控机制,主要包含三种验证场景:无验证码、滑块验证码和二次图标点选验证码。通过跟踪risk_inspect风控接口,发现验证流程采用标准AES加密,需提交设备指纹等加密信息。当触发验证码时,需额外提交包含轨迹坐标的verify_msg参数及token/rid参数。最终通过风控检测后,需使用一致的指纹参数和验证token完成加密登录。文章强调所有分析仅用于学习,代码实现需确保符合法律规范。

码王吴彦祖的博客 1100

PCL 加权局部最优投影(WLOP)简化算法

WLOP算法是一种点云重采样方法,通过迭代优化实现点云均匀化和特征保留。算法包含数据项(加权平均位置保持几何特征)和正则化项(排斥邻近点实现均匀分布)两部分。代码实现基于PCL库,通过KD树加速邻域搜索,使用高斯权重函数计算点位置更新。参数包括输出点比例、邻域半径、正则化权重和迭代次数。该算法不依赖网格信息,适合处理大规模扫描数据的预处理优化。

点云侠的博客 631

java内部类引用外部类的变量时必须是final变量

每次android的触发事件时总是遇到内部类中不能调用外部类的非final变量。。但不知道什么原因,然后今天看到一个帖子上的跟们说的不错。知道原来是关于类的生命周期的问题。 我的解决方法是将方法内的方法定义到方法外部来。。        今天编写一个多线程程序,发现在方法内定义内部类时,如果内部类调用了方法中的变量,那么该变量必须申明为final类型,百思不得其解,后来想到应该是生命周

2713

【23】C++实战篇——C++报错:LNK2001:无法解析的外部符号 ,LNK2019: 无法解析的外部符号,原因分析及解决方法

该文分析了VS项目中出现的"无法解析的外部符号"LNK2001/LNK2019错误。问题表现为跨项目共享变量时,Projector项目无法解析Line项目中声明的外部变量ImgSavePath和ImgFormat。原因在于头文件声明了变量但未包含实现的源文件。解决方法是将getLine.cpp文件添加到Projector项目中。文章还总结了两种错误代码的区别:LNK2001通常对应变量缺失,LNK2019对应函数缺失。最后列出了具体的报错信息,包括无法解析的变量和函数符号。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 2007

java是内部变量外用_Java 局部 final 变量与内部类引用外部变量

之前一直不明白内部内引用其外部类的变量时此变量必须加 final 修饰只是照着用就是,刚刚就特意百度了下,才明白原来是这么回事!以下内容转自 51CTO本文是Thinking In Java中其中一段的阅读总结。如果定义一个匿名内部类,并且希望它使用一个在其外部定的对象,那么编译器会要求其参数引用是final 的。经研究,Java虚拟机的实现方式是,编译器会探测局部内部类中是否有直接使用外部定义变...

weixin_27282525的博客 201

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

内部类访问外部类的变量必须是final吗,java静态方法中不能引用非静态变量,静态方法中不能创建内部类的实例...

内部类访问外部类的变量必须是final吗? 如下: package com.java.concurrent; class A { int i = 3; public void shout() { class B { public void shout1() { Sy...

ankan7400的博客 354

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java内部类在引用外部类局部变量和成员变量时的区别

1.内部类引用外部类局部变量时,外部类的局部变量一定要用final修饰。 因为内部类和外部类的局部变量生命周期不一样,外部类方法执行完该局部变量可能会被释放掉,但该方法中的内部类可能还在执行(如线程),还要使用该变量,所以外部类变量设置为final的,变成常量,使用的时候内部类可以复制一个副本过去,相当于就不使用该局部变量了。 我们还可以从JVM的角度去解释这个现象,在编译期的时候,所有的类都会被...

weixin_43289620的博客 2888

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java 局部 final 变量与内部类引用外部变量

之前一直不明白内部内引用其外部类的变量时此变量必须加 final 修饰只是照着用就是,刚刚就特意百度了下,才明白原来是这么回事! 以下内容转自 51CTO 本文是Thinking In Java中其中一段的阅读总结。如果定义一个匿名内部类,并且希望它使用一个在其外部定的对象,那么编译器会要求其参数引用是final 的。经研究,Java虚拟机的实现方式是,编译器会探测局部内部类中是否有直接使用外...

weixin_30644369的博客 70

Java内部类引用外部类中的局部变量为何必须是final问题解析

---------------------android培训、java培训、期待与您交流! ----------------------------------------- 今天编写一个多线程程序,发现在方法内定义内部类时,如果内部类调用了方法中的变量,那么该变量必须申明为final类型,百思不得其解,后来想到应该是生命周期的原因,因为方法内定义的变量是局部变量,离开该方法,变

追梦 737

Java中为什么内部类对外部类局部变量有引用时,外部类局部变量一定要有final?

Java中为什么内部类对外部类局部变量有引用时,外部类局部变量一定要有final?   我们来看看Java对内部类的实现。 使用内部类经常是用在Listener这样的。而Listener中的监听函数被调用时,大部分情况,new内部类所在的函数早就执行完了,此时外部类局部变量(保存在栈中)早就因为函数的退出而失效了。   而加上final后,编译器是这样处理内部类的。如果这个外部局部变量是

编程人生 1227

java 局部内部类 使用局部变量_通俗地解释为什么Java中局部内部类引用外部类的局部变量必须是final修饰的...

首先上一段代码(一言不合就上代码)public class AreaOuter {private int cnt = 1;public void show() {// 局部变量,java8开始,如果该变量被内部类引用,java编译器就会默认给该变量加final修饰。// 所以,如果该变量需要被内部类引用,虽然可以省略final,但是在实际开发中最好还是加上final。// 如果没有被内部类引用,那...

weixin_28699983的博客 251

Java内部类引用外部类中的局部变量为何必须是final?

今天编写一个多线程程序,发现在方法内定义内部类时,如果内部类调用了方法中的变量,那么该变量必须申明为final类型,百思不得其解,后来想到应该是生命周期的原因,因为方法内定义的变量是局部变量,离开该方法,变量就失去了作用,也就会自动被消除,而内部类却不会离开它所在方法就失去作用,它有更广的生命周期,下面通过一个实例加以说明:     如例中所示,在外部类Outer中声明了

bangrenzhuce的博客 1373

java 引用内部类变量_Java内部类引用外部类中的局部变量为何必须是final问题解析...

今天编写一个多线程程序,发现在方法内定义内部类时,如果内部类调用了方法中的变量,那么该变量必须申明为final类型,百思不得其解,后来想到应该是生命周期的原因,因为方法内定义的变量是局部变量,离开该方法,变量就失去了作用,也就会自动被消除,而内部类却不会离开它所在方法就失去作用,它有更广的生命周期,下面通过一个实例加以说明:如例中所示,在外部类Outer中声明了一个内部类TimerPrint,这个...

weixin_42328834的博客 223
上一篇: 银行家安全性算法实现(java)
下一篇: Tomcat调用解析(EndPoint分析)
slience.
博客等级 码龄7年 111粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值