KKB:内部类一句话概括、成员内部类、局部内部类、匿名内部类(只能访问final型的局部变量)、静态内部类

内部类

可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类

 

成员内部类

最基本的一个内部类

下面的例子  介绍了如何创建一个成员内部类以及如何使用

成员内部类 是可以直接调用外部类的成员变量和方法的

如果外部类和内部类都有变量x,那么内部类直接使用的是自己内部类的x

如果想使用外部的同名变量,需要使用外部类.this.成员变量名

 

 

局部内部类

这就是一个局部内部类

 

 

匿名内部类

 

接口不能实例化,但是匿名内部类 就相当于new 了一个接口,然后在接口方法里实现

 

 

上面的最后一条注意事项:只能访问final型的局部变量,为什么呢???

 

原因:1.8之前,局部内部类只能访问final类型的变量,1.8的时候,可以将final修饰的变量,省略不写final

 

 

原因:从反编译的角度去理解

在.java文件编译成 .class字节码文件的时候,成员内部类是要单独放在另外一个文件中的,就是和原来文件是分离的,但是内部类使用了外部类的成员变量,所以JVM虚拟机就将外部的成员变量做了一个备份存储在 内部类文件中。如果这时成员变量是一个变量,在变化,那么在运行时,内部类文件就无法确定运行,就会产生不同的结果。所以规定 内部类 使用外部类的成员变量需要使用final修饰,让变量成为一个常量

再次总结这个问题:局部内部类只能访问final型的局部变量,为什么呢

 

因为在程序运行时,局部内部类会单独编译成一个文件,而使用的成员变量是以备份的形式存储在内部类文件中的。为了保证 程序运行时内部类的变量和外部的变量一致,不会出现逻辑错误,所以规定 只能访问final类型的局部变量

 

 

静态内部类

 

静态内部类和 成员内部类 相似但是又有区别

创建内部类的方式相似

区别:成员内部类是要先创建外部类,才能调用内部类

静态内部类创建出来之后,外部类还没有创建出来

 

静态内部类不能 访问外部类 非静态的资源,因为非静态的资源还没创建

静态内部类可以 访问外部类中 静态的资源

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你在狗叫什么、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值