<JAVA编程思想第四版>——初始化和清除
4.1 用构造器初始化
构造器名称与类名相同,可以使用自变量,无返回值(属于特殊的方法类型)
如果不明确指定类的构造器函数,那么编译器会生成默认构造器。
class Inspur { } public class TestConstructor { public static void main(String[] args) { new Inspur();//invoke default constructor } }
但一旦用户指定一个构造器,编译器就不会生成默认构造器(无参构造器)。
4.2 方法重载
方法重载是构造器必需的,但它也可以应用于其它任何方法。
4.2.1 区分过载方法
过载方法的名字相同,那如何区分?答:根据自变量类型列表(类型 + 顺序)
类中的方法(包括静态方法)不能有相同的自变量类型列表。
4.2.2 主类型过载
传入常数5,过载方法中如果有int类型,就会匹配Int类型。如果没有Int类型,则按照最最小离int最小的类型匹配(long,float,或者double)
传入char类型,过载方法中有char类型,就会匹配char类型。没有则首先匹配Int类型,没有Int则匹配离Int最小的类型(long,float,double)
byte类型(byte,short,int,long,float,double)
short类型(short,int,long,float,double)
int类型(int,long,float,double)
long类型(long,float,double)
float类型(float,double)
以上的匹配是自动的;如果传入int类型,而重载函数的自变量类型都“小于”int,则不会自动匹配,编译错误。需要手动转换成对应类型。
“缩小转换”必须手动指定,编译器无法自动完成。因为转型过程中会造成数据精度丢失。
4.2.3 返回值过载
返回值过载不可以。
4.2.4 默认构造器
定义构造器的时候,最好同时构造无参构造器。因为如果自己定义一个有参构造器,编译器就不会给我们创建一个默认无参构造器。
4.2.5 this 关键字
this关键字(注意只能够在方法内部使用)可为已调用了其方法的的那个对象生成相应的句柄。
类中方法A内部调用方法B,不必指定this关键字。此时this句柄会自动应用到其它方法
this关键字只能用于特殊的类,需要明确使用当前对象的句柄。
1. 在构造器中调用构造器
2. static关键词的含义
static方法没有this,不能在static方法内部调用非static方法,但是可以在非static方法内部调用static方法。
特殊的,我们可以将对象句柄传递到static方法内部,然后通过句柄调用非static方法,并访问非static字段。
4.3 清除、收尾和垃圾回收
JAVA使用垃圾收集器回收不再使用的内存,但只是回收使用new分配的内存。如果一个对象包含有“特殊”内存,没有使用new,则垃圾收集无法回收。
finalize()方法,垃圾收集器准备释放对象占用的内存时,会首先调用finalize()方法,进行清除或清扫工作。
4.3.1 finalize()用处
一般是通过固有方法分配的内存。finalize()中调用固有方法释放内存。所以finalize()一般用不到,只有极其特殊的场合使用。
4.3.2 必须执行清除
java中不允许创建本地对象,必须使用new