- 内存管理:由JVM来管理
- 堆:
- 存储new出来的对象(包括实例变量)
- 垃圾:没有任何引用所指向的对象
- 垃圾回收器(GC)不定时到内存中清扫垃圾
- 回收过程是透明的(看不到的),不一定一发现就立刻回收,通过调用System.gc()可以建议JVM尽快调度GC来回收垃圾
- 实例变量的生命周期:
- 创建对象时存储在堆中,对象被回收时一并被回收
- 内存泄漏:不再使用的内存还没有被及时的回收,严重的泄露会导致系统的崩溃
- 建议:不再使用的对象应及时将引用设置为null
- 栈:
- 局部变量的生命周期:
- 调用方法时存储在栈中,方法结束时与栈帧一并被清除
- 调用方法时,在栈中为该方法分配一块对应的栈帧,栈帧中存储的是局部变量和方法的参数,方法调用结束时,栈帧被自动清除,局部变量一并被清除
- 存储正在调用的方法中的局部变量(包括方法的参数)
- 局部变量的生命周期:
- 方法区:
- 存储 .class字节码文件(包括静态变量、方法)
- 方法只有一份,通过this(对象)来区分具体的调用方法
- 堆:
- GC:垃圾回收器
- 垃圾收集器在一个 Java 程序中的执行是自动的
- 不能强制执行,即使程序员能明确地判断出有一块内存已经无用了,是应该回收的,程序员也不能强制垃圾收集器回收该内存块
- 程序员唯一能做的就是通过调用 System.gc()方法来"建议"垃圾收集器去进行垃圾回收处理,但其是否可以执行,什么时候执行却都是不可知的。
- 面向对象三大特征
- 封装
- 类:封装的时对象的属性和行为
- 方法:封装的是特定的业务逻辑功能实现
- 访问控制修饰符:封装的是具体的访问权限
- 封装
- 继承:代码复用
- 超类:所有派生类共有的属性和行为
- 接口:部分派生类共有的属性和行为
- 派生类/实现类:派生类特有的属性和行为
- 单一继承、多借口实现,传递性
- 多态
- 行为多态:所有抽象方法都是多态的(通过重写来实现)
- 对象多态:所有对象都是多态的(通过向上造型为实现)
-
向上造型、强制类型转换、instanceof判断
- 三个简单异常
- ClassCastException类型转换异常,避免用instanceOf判单
- ArrayIndexOutOfBoundsException数组下标越界
- nullPointException空指针异常
- 注意:复用性、扩展性、维护性一定要好,设计软件时候,能用父类,就绝对不用子类,用父类的时候就代表多个,用子类的话就代表一个写死了
- 实例变量有默认值,局部变量没有默认值
shou(){
int a;
System.out.println(a)//编译错误,局部变量没有初始化
}
- 没有引用指向的对象,都是垃圾
//没有引用指向的对象 都是垃圾
//这里是把a 的地址赋给了aa
//a=null,此时 对象a就是垃圾了,但是 aa不是垃圾,因为aa有地址
Airplane a = new Airplane()
Airplane aa = a;