【转】从内部类中访问本地变量temp; 需要被声明为最终类型

2024-02-20 06:18

本文主要是介绍【转】从内部类中访问本地变量temp; 需要被声明为最终类型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42097653/article/details/80675085

-----------------------------------------------------------------------------------------------------------------------------

class Outer{        // 定义外部类private String info = "hello world" ;   // 定义外部类的私有属性public void fun(final int temp){        // 定义外部类的方法class Inner{                        // 在方法中定义的内部类public void print(){                // 定义内部类的方法System.out.println("类中的属性:" + info) ;       // 直接访问外部类的私有属性System.out.println("方法中的参数:" + temp) ;}};new Inner().print() ;               // 通过内部类的实例化对象调用方法}
};
public class InnerClassDemo05{public static void main(String args[]){new Outer().fun(30) ;   // 调用外部类的方法}
};


定义在成员位置处的类为成员内部类,而定义在局部位置处的类为局部内部类。

当内部类访问外部类的局部变量或者外部方法的局部变量/函数参数时,需要将该变量声明为最终类型。
System.out.println("方法中的参数:" + temp) ;
temp是外部方法的函数形参,那么这个参数就需要声明为最终类型。


为什么呢???

是因为fun(30)函数被调用后,函数参数等就会被内存机制回收,因为他们是被分配到栈中的。而内部类的对象是在堆中分配内存的,外部方法调用结束后该内部类对象不一定就被销毁了;所以就会出现一个奇怪的现象:内部类对象在访问一个不存在的局部变量。
这时候,用状态修饰符final修饰该变量,从而该变量成了常量,解决了这个问题。

本质: 局部变量的生命周期与局部内部类的对象的生命周期的不一致性.

参考(致谢):
https://www.cnblogs.com/ioveNature/p/7011204.html
https://blog.csdn.net/seashine_yan/article/details/67637941
————————————————
版权声明:本文为CSDN博主「thjstar」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42097653/article/details/80675085

 

这篇关于【转】从内部类中访问本地变量temp; 需要被声明为最终类型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/727288

相关文章

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

MySQL中的InnoDB单表访问过程

《MySQL中的InnoDB单表访问过程》:本文主要介绍MySQL中的InnoDB单表访问过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、访问类型【1】const【2】ref【3】ref_or_null【4】range【5】index【6】

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

Python变量与数据类型全解析(最新整理)

《Python变量与数据类型全解析(最新整理)》文章介绍Python变量作为数据载体,命名需遵循字母数字下划线规则,不可数字开头,大小写敏感,避免关键字,本文给大家介绍Python变量与数据类型全解析... 目录1、变量变量命名规范python数据类型1、基本数据类型数值类型(Number):布尔类型(bo

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

一文全面详解Python变量作用域

《一文全面详解Python变量作用域》变量作用域是Python中非常重要的概念,它决定了在哪里可以访问变量,下面我将用通俗易懂的方式,结合代码示例和图表,带你全面了解Python变量作用域,需要的朋友... 目录一、什么是变量作用域?二、python的四种作用域作用域查找顺序图示三、各作用域详解1. 局部作

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe

Python程序的文件头部声明小结

《Python程序的文件头部声明小结》在Python文件的顶部声明编码通常是必须的,尤其是在处理非ASCII字符时,下面就来介绍一下两种头部文件声明,具有一定的参考价值,感兴趣的可以了解一下... 目录一、# coding=utf-8二、#!/usr/bin/env python三、运行Python程序四、

Maven项目打包时添加本地Jar包的操作步骤

《Maven项目打包时添加本地Jar包的操作步骤》在Maven项目开发中,我们经常会遇到需要引入本地Jar包的场景,比如使用未发布到中央仓库的第三方库或者处理版本冲突的依赖项,本文将详细介绍如何通过M... 目录一、适用场景说明​二、核心操作命令​1. 命令格式解析​2. 实战案例演示​三、项目配置步骤​1