重载规则:每个重载的方法都必须有一个独一无二的参数类型列表
- 参数的顺序不同可以区分。
- 基本数据类型的重载 :有则调用,如果实际传入小则提升,去调用比实际传入大的。char直接提升为int。如果实际传入大,要进行转型,强制转化为小的,不然编译器会报错。
- 大小标准:char byte short int long float double
- 不能用返回参数作为区分的依据。原因:重载的应用场景在方法调用的时候。用相同的方法名,以传入的参数列表不同来区分调用不同的方法,有时候在调用时我们并不关心方法的返回,而只是关心方法的运行带来的一些效果。
默认构造器:没有构造器编译器会默认创建一个,因为要确保每一个对象在创建之前都被初始化。如果定义了其他构造器,新建对象时如果调用默认构造器就会报错。
this关键字:类是一个模板,每个对象都有自己的属性和方法,可以向对象发送消息。每个对象有自己的属性和方法是合理的,但是对一个对象来说,属性是特有的,但是方法却可以通用,所以没有给每个对象都分配方法的空间,这样就不会冗余,在对象调用方法时,传入对象的引用。也就是每个非静态方法都会持有调用该方法的对象的引用。
- this关键字加参数可以调用构造器,但是调用构造器只能放在方法内部第一行。
- 只能在构造器内部调用构造器,不能在方法中调用构造器。
- static 方法不持有对象的引用,也就是方法内不存在this。它是类方法。
垃圾回收 finalize()
- 对象可能不被垃圾回收。
- 垃圾回收不等于“析够”。
- 垃圾回收只与内存有关。
- System.gc()用于强制执行终结动作。
成员初始化
- java保证所有变量在使用前都得到恰当的初始化。
方法的局部变量用编译时错误的形式保证。
void f(){
int i;
i++; //编译器报错
}成员变量编译器会自动初始化,引用会被初始化为NULL。
- 无论创建多少个对象,静态数据都只会占用一存储区域。
- static 关键字不能作用于局部变量,只能作用于域。
- 如果静态域没有初始化,也会获得基本类型的标准初值。引用赋值为null。
指定初始化:在定义的时候直接初始化。
构造器初始化:无法阻止自动初始化的进行,它将在构造器被调用之前发生。
初始化顺序(先静态对象,而后非静态对象)
- java解释器查找类路径,定位类的class文件。
- 载入类,创建class对象,静态初始化的所有动作执行(在类加载时只执行一次)
- 当new 一个新类的时候,首先在堆上为对象分配足够的空间。
- 将空间清零,也就是为基本类型赋初值。
- 执行所有出现于字段定义处的初始化。
- 执行构造器。
文字解释加载顺序: 先找到类文件—>加载进来—>(再去寻找类的静态域—>如果有—>在堆上分配空间—>将空间清零—>再去执行静态域定义处的初始化—>所有定义处的初始化执行完—>再执行静态代码块的初始化)—>然后开始创建对象—>为对象分配内存空间—>空间清零—>执行字段定义处的初始化—>执行代码块的初始化—>执行构造器。
代码块的作用:因为代码块是在构造器之前调用的,每新建一个对象就要执行一次,每次可能新建不同的对象,要执行不同的构造器,但是构造器可能有共同的方法,我们可以抽取出来放在代码块里,就不需要在每一个构造器里写了。