[Java]学习笔记(二)

来源:互联网 发布:淘宝茜茜家的铺子真假 编辑:程序博客网 时间:2024/06/05 11:51

一、终结处理和垃圾回收

1. finalize()

一旦垃圾回收器gc准备好释放对象占用的存储空间,将首先调用finalize(),并且在下一次垃圾回收动作发生时才会真正回收对象占用的内存。
注意:
1. finalize()≠垃圾回收动作!
2. 对象可能不被垃圾回收!
垃圾回收本身也有开销,只要程序没有濒临存储空间用完的那一刻,对象占用的空间就总也得不到释放,最终会随着程序退出释放。
3. 垃圾回收不等于析构!
Java并未提供“析构函数”或类似的概念。C++中每个new的对象在其作用域末尾处调用delete来析构。
4. 垃圾回收只与内存有关!

2. 终结条件:

finalize()可以用来对对象终结条件的验证。
例:
class Book {boolean checkedOut = false;Book(boolean checkOut) {checkedOut = checkOut;}void checkIn() {checkedOut = false;}protected void finalize() {//if (checkedOut) {// 不管此处是否有判断条件,该方法都只被调用一次System.out.println("Error: checked out");//super.finalize();//}}}public class TestFinalize {public static void main(String[] args) {Book novel = new Book(true);novel.checkIn();new Book(true);System.gc();}}

二、初始化

1. 成员初始化:

Java尽力保证:所有变量在使用前都能得到恰当的初始化。

2. 构造器初始化:

无法阻止自动初始化的进行,它将在构造器被调用之前发生。
1. 初始化的顺序:
变量定义的先后顺序决定了初始化的顺序,它们会在任何方法(包括构造器)被调用之前得到初始化。
静态对象先于非静态对象。
2. 静态数据的初始化:
无论创建多少个对象,静态数据都只占用一份存储区域,静态初始化动作只执行一次。static关键字不能应用于局部变量,只能作用于域。
注意:构造器实际上也是静态方法。
3. 显示的静态初始化
static {
.......
}
4. 非静态实例初始化只是比静态少了static关键字

3. 数组初始化:

1. 如果创建了一个非基本类型的数组,那么该数组为一个引用数组,对于数组中的每个对象都要再次创建,否则在引用时会报错!
2. 所有的类都直接或间接继承与Object类;
3. 在打印一个没有初始化的类对象时,默认行为就是打印该类的名字+对象的地址;

三、枚举enum

public enum Name {
a, b, c
}
1. 可以使用ordinal()访问特定enum常量的声明顺序;
2. 可以在switch中使用。
0 0