一、接口
-
是一种数据类型(引用类型)
-
由interface定义
-
只能包含常量和抽象方法(不写默认加public static final、public abstract)
-
接口不能被实例化
-
接口需要被实现,实现类。必须重写所有方法
-
一个类可以实现多个接口,用逗号分隔。若又继承又实现,先继承后实现(规定)
-
接口可以继承接口(可以继承多个)
类和类—继承
接口和接口—继承
类和接口—实现
二、多态
- 意义
- 行为多态(对象不同行为不同)
- 对象多态(向上造型不同行为不同)
- 向上造型
- 超类型的引用指向派生类的对象
- 能造型成为的类型有:超类+所实现的接口
- 能点出来什么,看引用的类型
- 强制类型转换
- 引用所指向的对象,就是该类
- 引用所指向的对象,实现了该接口或继承的该类
- 强制失败:ClassCastException
建议在强转之前先通过instanceof来判断引用的对象是否是该类型
三、内存管理
- 内存管理:
- 堆
- 存储new出来的对象(包括实例变量)
- 垃圾:没有任何引用指向的对象。垃圾回收器(GC)不定时到内存中清扫垃圾,回收过程是透明的(看不到),不一定一发现就立刻回收。
调用System.gc()可以建议jvm尽快调度GC来回收 - 内存泄露:不在使用的对象还没有被及时的回收。建议:对象不再使用时应及时将引用设置为NULL
- 实例变量的生命周期:创建对象时存储在堆中,对象被回收时一并被回收。创建到回收的过程。
- 栈
- 存储正在调用中的方法中的局部变量(包括方法参数)
- 调用方法时,会为该方法在栈中分配一块对应的栈帧,栈帧中存储局部变量(包含方法参数)当方法调用结束时,栈帧被清除,局部变量也一并失效。
- 局部变量的生命周期:
调用方法时存储在栈中,方法结束时与栈帧一并被清除
- 方法区
- 存储.class字节码文件(包括方法、静态变量)
- 方法只有一份,通过this来区分具体的调用对象
- 堆
实例变量
- 类中,方法外
- 创建对象时存储在堆中,对象被回收时一并被回收
- 有默认值
局部变量
- 方法中
- 调用方法时存储在栈中,方法结束时与栈帧一并被清除
- 没有默认值