首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java内部类 访问final变量----局部内部类访问局部变量

局部内部类与其他类相比,还有一个优点就是: 它不仅能够访问包含它们的外部类的数据和方法,还可以访问定义它的块的局部变量, 但是有个前提条件:这些局部变量必须被声明为final 知识回忆...A的一个方法,任何人都都休想访问我,我对外部世界是完全隐藏的,只有start()方法有权限操作我"); System.out.println("我可以访问我的作用域中的局部变量,这个局部变量的类型必须有...a = new A(); a.print(); } public static void findInnerClass(){ System.out.println("对不起,我不能直接访问部类...或者我想要这个变量在内部类中被多次的修改怎么办呢? 有没有补救的办法呢?...数组的数据元素可以自由的更改。

1.1K10

部类只能访问final的局部变量_java内部类引用外部变量

因为在JDK8之前,如果我们在匿名内部类需要访问局部变量,那么这个局部变量必须用final修饰符修饰。这里所说的匿名内部类指的是在外部类的成员方法定义的内部类。...既然是在方法创建的内部类,必然会在某些业务逻辑中出现访问这个方法的局部变量的需求。那么我们下面就会研究这种情况。 为什么java语法要求我们需要用final修饰呢?...,是因为在底层将这个局部变量的值传入到了匿名内部类,并且以匿名内部类的成员变量的形式存在,这个值的传递过程是通过匿名内部类的构造器完成的。...这里举个栗子:原先局部变量指向的是对象A,在创建匿名内部类后,匿名内部类的成员变量也指向A对象。但过了一段时间局部变量的值指向另外一个B对象,但此时匿名内部类还是指向原先的A对象。...在JDK8如果我们在匿名内部类需要访问局部变量,那么这个局部变量不需要用final修饰符修饰。看似是一种编译机制的改变,实际上就是一个语法糖(底层还是帮你加了final)。

90420
您找到你想要的搜索结果了吗?
是的
没有找到

灵魂拷问:Java内部类如何访问部类私有对象的?

; } public innerClass(String innerName){ this.innerName = innerName; } } } 这是我简单手写的一个外部类嵌套一个内部类...编译器小哥偷偷的做了一些不可告人的事情,首先,内部类多了个常量引用,准备指向着外部类,而且又偷偷修改了构造方法。传递一个OutClass类型的参数进去。这样内部类就拿到了外部类的引用。...但是仅仅拿到引用有个毛线用,通过反编译可以看到,生成的是两个字节码文件,在虚拟机看来,这就是两个不相关的类,你能在一个类调用另外一个类的私有属性吗??? 很明显不能。...将指向外部类的引用作为参数给那三个外部类的静态方法 然后我们去反编译看看那三个静态方法怎么实现的 又是祭出伟大的反编译工具 ? 看得出,这三个方法都是返回外部类对应的私有属性!...结论 在虚拟机没有外部类部类之分都是普通的类,但是编译器会偷偷的做点修改,让内部类多一个常量引用指向外部类,自动修改内部类构造器,初始化这个常量引用,而外部类通过扫描内部类调用了外部类的那些私有属性

2.5K10

没有任何类型 Windows 的外层实例可访问---Java内部类类型

Java内部类与外部类 错误提示: 没有任何类型 TestThread 的外层实例可访问。...所以内部类的成员变量/方法名可以和外部类的相同。 1. 成员内部类       成员内部类,就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private的。...同时外部类访问部类的所有成员变量/方法,则需要通过内部类的对象来获取。       要注意的是,成员内部类不能含有static的变量和方法。...首先,内部类被编译的时候会生成一个单独的内部类的.class文件,这个文件并不与外部类在同一class文件。  ...,如果编程人员在程序设计的时候在内部类改掉参数的值,但是外部调用的时候又发现值其实没有被改掉,这就让人非常的难以理解和接受,为了避免这种尴尬的问题存在,所以编译器设计人员把内部类能够使用的参数设定为必须是

1.5K80

没有任何类型 Windows 的外层实例可访问---Java内部类类型

Java内部类与外部类 错误提示: 没有任何类型 TestThread 的外层实例可访问。...所以内部类的成员变量/方法名可以和外部类的相同。 1. 成员内部类       成员内部类,就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private的。...同时外部类访问部类的所有成员变量/方法,则需要通过内部类的对象来获取。       要注意的是,成员内部类不能含有static的变量和方法。...首先,内部类被编译的时候会生成一个单独的内部类的.class文件,这个文件并不与外部类在同一class文件。  ...,如果编程人员在程序设计的时候在内部类改掉参数的值,但是外部调用的时候又发现值其实没有被改掉,这就让人非常的难以理解和接受,为了避免这种尴尬的问题存在,所以编译器设计人员把内部类能够使用的参数设定为必须是

1.1K20

为什么局部内部类访问外边的局部变量必须为final

6.局部内部类访问外边的局部变量时,此变量必须为final类型  马克-to-win:由于技术方面的限制,java的设计者们做出如下语法规定:局部内部类访问外边的局部变量时,此变量必须为final类型...an inner class defined in a different method  例2.6 class ShellMark_to_win {    int x = 100;//x是类变量..., 内部类访问时不用加final。    ...void test() {         for (int i = 0; i < 2; i++) { /*马克-to-win:下面的y和str是局部变量,内部类访问时必须加final  */             ...            class Core {                 void display() {                     System.out.println("外部类

58230

一个变量在内如何存储的

我们自学习一门高级语言时,都要了解数据成分,可你们知道在高级语言中数据都是如何在内存储的吗?今天我就来介绍一下。...然后变量c在内存就占了四个字节,对应的就是上面的补码。 然后接着谈无符号的int。...所以就要求出这个数的补码,我上面说过,有符号数,在内存储的都是补码。 首先是一个符号,符号位为1,然后1的二进制就是1,还剩下30个bit用0补齐。 得到原码: ?...由于我们test2是一个无符号的int型变量,所以他就把这个32个1直接转为了10进制,也就是 ? 看到这里,我相信大家应该明白了变量如何在内存中表示的,以及有符号和无符号变量的区别了吧。...注意:只有当数值为负数时,在内才会存补码形式。 比如:int i=124; 虽然我定义的一个有符号型的int变量,但是由于i是一个正数,所以在内的存储形式为原码: ?

2.6K40

java学习笔记(基础篇)—内部类

静态内部类具有以下特点: 1)静态内部类可以直接访问部类的静态资源。如果静态内部类变量名字和外围类的变量名字相同,需要指定访问时的谁的名字。...相当于成员变量。放在方法外,类里面的。 特点: 1)在内部类,可以直接访问部类的所有资源(属性和方法)。 2)成员内部类不能定义静态的资源,只能定义非静态的资源。...5)局部内部类还可以访问所在方法的final类型的局部变量。final延长局部变量的生命周期。 d)匿名内部类:在一个方法定义的内部类,它的可见范围是当前方法。和局部变量一样。...局部内部类:可以直接访问部类的所有成员, 访问所在方法的final类型的参数和变量; 匿名内部类:可以直接访问部类的所有成员, 访问所在方法的final类型的参数和变量; //成员内部类,静态内部类...在内部类只有在该外围类有意义,出了该外围类就没有意义了, 就可以将该类定义成内部类

55460

Java面向对象问题汇总

它隐藏在外部类,封装性更强,不允许除外部类的其他类访问它。但它可直接访问部类的成员。...静态内部类只能访问部类的静态成员变量和静态方法,而非静态内部类由于持有对外部类的引用,可以访问部类的所用成员。 3.4、内部类作用的作用主要是什么?...由于方法的局部变量的生命周期很短,一旦方法结束变量就要被销毁,为了保证在内部类能找到外部局部变量。...如果定义为final,java会将这个变量复制一份作为成员变量内置于内部类,通过final关键字可得到一个外部变量的引用。通过final关键字也不会在内部类去做修改该变量的值,保护了数据的一致性。...局部变量变量是很重要的垃圾回收根节点,被局部变量变量直接或者间接引用的对象都不会被回收。

35130

Python类的属性、方法及内置方法

1.类的属性 成员变量 对象的创建 创建对象的过程称之为实例化,当一个对象被创建后,包含三个方面的特性对象聚丙属性和方法, 句柄用于区分不同的对象, 对象的属性和方法,与类的成员变量和成员函数对应,...**私有属性**---不能在内外贝类以外函数调用 定义方式:以"__"双下划线开始的成员变量就是私有属性 可以通过instance....类方法为: 公有方法 私有方法 类方法 静态方法 公有方法:在类中和类都都测调用的方法....__age # 通过类访问内部变量 sm = staticmethod(test) jack = People() People.sm() 装饰调用类的方法: #!...print People.color #通过类访问还是原来的值 垃圾回收机制: Python采用垃圾回收机制来清理不再使用的对象;python提供gc模块释放不再使用的对象。

3.2K20

如何理解Python变量

变量Python,存储一个数据,需要定义一个变量 number1 = 1 #numbe1就是一个变量,用来保存数据:1 number2 = 2 #number2也是一个变量,用来保存数据:2 sum...= number1+number2 #sum也是一个变量,用力保存1+2的值 说明: 所谓变量:就是可以改变的量。...程序就是用来处理数据的,而变量就是用来存储数据的 python变量不需要指明类型,系统会自动识别 内容扩展: 变量命名 1、下划线或大小写字母开头,后面可跟下划线、大小写字母和数字任意组合(但一般以下划线开头具有特殊含义...避开保留字和关键字,如class、def、break、for;(打印出系统全部关键字方法,import keyword;//首先引起关键字模块 print(keyword.kwlist)//打印) 到此这篇关于如何理解...Python变量的文章就介绍到这了,更多相关Python变量是什么意思内容请搜索ZaLou.Cn

2K30

在Java内部类中使用外部类的成员方法以及成员变量

如何在内部类返回外部类对象)也就是说,要从外部类初始化一个内部类的对象,此时内部类的对象就会绑定在外部类的对象上。这跟普通的类有所不同。普通的类,创建完之后,不一定马上需要实例化。...内部类可以访问它外部类的成员,但是内部类的成员(如成员变量或者成员方法)只有在内部类的范围之内是可知的,不能够被外部类直接引用。...在外部类和成员内部类,都可以定义变量。成员内部类可以随意访问部类变量,而外部类不能够直接访问部类变量,只有通过使用内部类对象来引用内部类的成员变量。...由于在内部类可以随意访问部类成员方法与成员变量。但是此时成员内部类与外部类变量名相同,那么如果要在内部类使用这个变量i,编译器怎么知道现在需要调用外部类变量i,还是内部类变量i呢? ...此时如果在成员内部类调用这个变量,该如何进行区分呢?通常情况下,如果使用this.i 的方式来调用变量,则表示这个变量是成员内部类定义的变量

2.7K10
领券