局部内部类引用外部类方法中的变量需要用final修饰

第一点:外部类和内部类被编译成了两个独立的CLASS文件

第二点:内部类中引用外部类的局部变量时,编译文件中显示会把局部变量的备份以构造函数的形式传入内部类。

这样两点分析之后存在的问题:

外部类程序运行过程对局部变量的修改,内部类是完全不知情的,导致了数据的不一致。

问题解决:

用final修饰;

final关键字详解:

final根据修饰位置的不同作用也不相同,针对三种情况:

  1)修饰变量,被final修饰的变量必须要初始化,赋初值后不能再重新赋值。

      注意:局部变量不在我们讨论的范畴,因为局部变量本身就有作用范围,不使用private、public等词修饰。

  2)修饰方法,被final修饰的方法代表不能重写。

  3)修饰类,被final修饰的类,不能够被继承。

      注意:final修饰的类,类中的所有成员方法都被隐式地指定为final方法。

  2.1 final修饰变量

    被final修饰的变量必须显示的初始化,初始化可以以三种方式:1)定义时初始化,2)在构造器中设置值,3)在非静态块中为final实例变量设置值。

    final修饰变量指的是:这个变量被初始化后便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可变,即不能再指向其他的对象

使用final关键字,如果编译器能够在编译阶段确定某变量的值,那么编译器就会把该变量当做编译期常量来使用。如果需要在运行时确定,那么编译器就不会优化相关代码。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值