java内部类引用外部变量

ArcGIS数据处理必备技能:从地理坐标到UTM投影的面转栅格完整流程 本文详细介绍了在ArcGIS中从地理坐标到UTM投影的面转栅格完整流程,包括坐标系转换、像元大小设置及质量控制等关键步骤。通过实战案例和Python脚本示例,帮助用户解决常见问题并优化数据处理效率,特别适合需要精确GIS数据分析的专业人士。 阅读详情

今天学习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在主线程的栈中已经消失了,那么为什么另外一个线程还能使用呢?
后来查询资料,是第二个线程复制了一份引用在自己的线程栈中,这样就算主线程的引用销毁,但是子线程还能用。

知识图谱中的 Ontology(本体论) 1980年,本体论(Ontology)哲学概念“本体”被引入到人工智能领域用来刻画知识。本体概念模型、明确、形式化、共享。本体是实体存在形式的描述,往往表示为一组概念定义和概念之间的层级关系,本体框架形式树状结构,通常被用来为知识图谱定义schema。如人、公司、车等都可以在具体场景下称为本体。Ontology是(特定领域)信息组织的一种形式,是领域知识规范的抽象和描述,是表达、共享、重用知识的方法。Ontology。 阅读详情

相关推荐

MatterPort3D 数据集下载

【代码】MatterPort3D 数据集下载。

qq_44106838的博客 6784

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

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

weixin_53122091的博客 1925

最新打赏系统打赏源码麒麟最新打赏源码喜盈门打赏知识付费课程教程直播讲解

打赏源码打赏系统

qq_41095398的博客 2037

Java内部类

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

qq_25775675的博客 1232

如何运用好DeepSeek为自己服务:智能增强的范式革命 || 目录

1.1 认知增强的三次浪潮1.2 DeepSeek认知增强模型1.3 人机认知耦合协议1.4 认知增强的数学基础。

𝓓𝓸𝓶𝓲𝓷𝓪𝓽𝓲𝓷𝓰 𝓐𝓵𝓵 𝓣𝓱𝓲𝓷𝓰𝓼 1224

FD.io/VPP — VPP 的实现原理解析

目录 文章目录目录VPPVPP 的关键创新技术数据报文的矢量处理标量报文处理方式I-cache miss 问题矢量数据报文处理方式标量 v.s. 矢量报文处理流程Packet Processing Graph(数据报文处理图)Packet Processing Graph 的处理流程Graph Node Plugin 机制 VPP WIKI:https://wiki.fd.io/view/VPP Docs:https://fd.io/docs/vpp/master/index.html Github:ht

烟云的计算 2593

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

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

qq_40602312的博客 482

一张微服务地图的十年演进:Spring Cloud 核心、扩展与工具组件的定位、原理与选型

本文把 Spring Cloud 当作一张微服务地图来读:先说明它是由 Commons 抽象层、实现层和 Boot 装配层构成的发行版,再沿一次请求梳理注册发现、负载均衡、声明式调用、容错限流、网关、配置、追踪与总线七类核心组件的原理与换代,并扩展到云平台、服务网格、消息流、批处理、安全与周边生态。仿真实测:默认参数下实例宕机平均 242 秒才被感知,优雅下线降到 47 秒;一个慢实例让轮询的 P99 达 49 秒,P2C 仅 203 毫秒。最后给出退场替代表、技术栈组合、升级路线和决策树。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 169万+

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

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

weixin_46969393的博客 1643

Java全栈:电影数据检索与推荐系统实战

全文检索个性化推荐数据缓存容器化部署通过这个项目,我们不仅实践了Java全栈开发的各项技术,还接触了推荐系统的核心算法实现。用户历史行为数据物品特征数据上下文信息实时反馈算法的准确性推荐的多样性系统的实时性冷启动问题性能优化效果评估VIEW, // 浏览CLICK, // 点击SEARCH, // 搜索RATE, // 评分COMMENT, // 评论SHARE, // 分享WATCH_TIME, // 观看时长。

exlink2012的专栏 891

什么是垂直同步?电脑快速消除屏幕撕裂与提升游戏性能的方法 垂直同步、游戏画面撕裂、游戏优化、VSync、FPS、FreeSync、G-Sync、显卡驱动更新、游戏画质、输入延迟

看这张动图,左边的画面出现了明显“切开”的断层现象,而右边画面非常流畅,没有撕裂。这正是「垂直同步」开关的区别。:每秒生成多少帧图像。比如 60FPS 表示一秒钟显示 60 张图片。刷新率(Refresh Rate):显示器每秒刷新几次画面,单位是赫兹(Hz)。60Hz 表示每秒刷新 60 次。参数说明FPS显卡渲染速度(逻辑帧率)刷新率显示器的显示频率(物理限制)当 FPS 高于刷新率时,显卡渲染的画面来不及被显示器显示,导致撕裂。屏幕撕裂(Screen Tearing)

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1347

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

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

2713

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

weixin_27282525的博客 201

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

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

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

ankan7400的博客 354

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

weixin_43289620的博客 2888

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、付费专栏及课程。

余额充值