目录
(3)局部内部类(和局部变量性质类似,可以用final修饰不可用public修饰)
1.导包:
2.
快捷键,shift+fn+f6可以选中你鼠标点击的变量并且选中所有出现这个变量的地方,统一修改。
3.
alt+回车,自动导包;ctrl + shift + u 变大写
4.
final:
增强可读性:
5.权限修饰符:
6.代码块:
(1)局部代码块:提前结束局部变量生命周期,用完就回收,现在不常用
(2)构造代码块:也淘汰了,不灵活
所以现在一般改进为:
(3)
应用于数据初始化:
写在static里面也防止了这个方法被反复调用导致一直new
7.抽象类
抽象类构造方法作用:
8.接口
(1)区别与抽象类
(2)格式:
(3)特点:
(4)利用内存分析工具:黑马程序员Java零基础视频教程(2022最新Java入门,含斯坦福大学练习题+力扣算法题+大厂java面试题)_哔哩哔哩_bilibili
(5)多个接口有重名的的抽象方法,我们就重写一次就可以
(6)小结:
9.继承树和接口怎么划分,思路很关键,要简洁并且提高效率
10.新特性拓展:
所以如果show是静态的,那么实现类里面的show不叫重写,只能正好名字一样
可以通过infer.show(),inferImpl.show()分别调用
11.jdk9
12.接口多态!
13.适配器:
InterAdapter作为过渡是空实现
interImpl实现类改成继承interadapter,然后需要哪个方法就重写哪个。
14.内部类
(1)成员内部类
权限和上面一样,private<默认<protected<public
内部类若是私有的,要是需要获得它的话,要么把private改了,要么就像下图一样,通过方法来返回:
其实迭代器内部原码也是这样操作的:
下面考虑一下重名:
若没有重名:
显然得到的是箭头指向的a
否则需要这样子:(和继承差不多,只有那个super换了)
内存分析呢,是这样的:依旧从栈,堆,方法区分析
先是进入标红这一行,那就把outer,inner类的字节码文件先加载,其中,outer和Inner是分开的
可以看下图:(字节码文件在Out文件中)
这就是编译的结果,是分开的
那这两个链式的New在堆区是这样的:
通过内存工具可以看到,内部类的局部变量:是有这么一个指针的
总结:
(2)静态内部类
在静态类内部想要用外部类的非静态成员,必须要这样
注意上图,用对象调用静态方法可以调,但是我们不提倡,所以它都没给提示。
用类名调用:
(3)局部内部类(和局部变量性质类似,可以用final修饰不可用public修饰)
用法: