第5章 初始化与清理
1、默认情况下编译器会创建一个无参的构造函数,但当手工创建一个后,默认的构造函数将失效。(编译器认为可能是程序员有意不提供无参的构造函数,以免造成错误!)
2、重载方法不能使用返回值进行区分。因为有可能存在并没有返回值的函数调用,这样编译器就不知道具体应该调用哪个方法了。
3、在类中的函数,编译器默认将该对象的引用(this)作为第一个参数加入到成员方法的参数列表中。当然也能通过return this;返回该对象。同时,这也可以使用this(args)来在构造器中调用其他构造器,不过只能使用一次,且必须放置在最起始处。
4、垃圾回收器(自适应的、分代的、停止-复制、标记-清扫):Java只在濒临存储空间耗尽时才会对无效对象占用的空间进行清理,甚至直到程序结束,存储空间才因为程序结束而被操作系统收回。
5、finalize():只在收回空间时才被调用,因此其处理过程必须与内存及其收回有关。其只在诸如Java调用了C或其他程序申请内存空间时被使用。且通常在函数的最后调用父类的super.finalize()。
6、变量初始化
- 函数中的局部变量编译器并不提供默认初始化,因为编译器认为这是程序员的疏忽,如果贸然提供初始化,可能反而造成之后程序的检查困难。
- 类中成员编译器提供初始化,并初始化为“零”。
- 当然,Java可以在声明这个变量时直接对其初始化或者调用方法,但C++并不能这么做。
- 静态变量只在被调用或者生成该类任意对象时被初始化。
7、生成类对象的操作顺序:访问静态变量---创建对象操作---静态成员变量初始化---非静态变量初始化---构造函数。
8、数组初始化
- int[] a = {1,2,3,4};
- int[] a = new int[4];
- int[] a = new int[]{1,2,3,4};
9、可变参数列表:function(int a, ..., Object... args)。当可变参数部分只包括一个数组时,将自动将其解释为一个数组,可以使用for(Object str : args)对其中元素进行访问;而如果其中还包含其他元素时,对应数组将以整体进行返回。
10、枚举类型,并可通过 .values()可到其所有类型的一个可遍历的对象。同时 .ordinal() 将返回对应的序列号。
public enum Test {
a(1, "a"),
b(2, "b"),
c(3, "c");
private final int code;
private final String info;
Test(int code, String info) {
this.code = code;
this.info = info;
}
public int code() {
return this.code;
}
public String info() {
return this.info;
}
}