Java内部类问题总结

Java 专栏收录该内容
9 篇文章 0 订阅

参考链接:Java内部类详解

1. 为什么成员内部类可以无条件访问外部类的成员

查看参考文章后总结出:
原因在于java编译器,虽然我们在源码中定义的内部类的构造器是无参构造器,但是编译器还是会默认添加一个参数,该参数的类型为指向外部类对象的一个引用,因此可以在成员内部类中随意访问外部类的成员。

2. 为什么局部内部类和匿名内部类只能访问外部类中的final变量

查看参考文章后总结出:

原因

内部类中访问外部类的变量会存在声明周期的影响

java的解决方案

为了解决该问题java使用复制的手段,说明如下:

  • 局部变量在编译期时就可以确认的,则会在内部类中有一份copy;
  • 局部变量在编译期无法确认的,则通过构造器传参方式来对copy进行初始化赋值

通过copy解决了声明周期影响变量使用的问题,但是引入一个新的问题,如下:

既然在内部类的变量和外部类中的变量虽然名称相同,但实际上是不同的变量,当在内部类中改变该变量的值的话实际上并不影响外部类中的变量,但是在程序的角度来说这两者是同一变量,改变其中一个另一个也会改变,这样就造成了数据不一致性问题。为了解决这个问题,java编译器限定将内部类引用外部类的变量必须被final修饰,也就是不允许对该变量进行更改(对于引用类型的变量,是不允许指向新的对象),这样就避免数据不一致性问题的产生。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值