java通过构造器进行对象的初始化,在对象初始化之前,会先对成员变量进行初始化(static变量只初始化一次)。new表达式会返回一个新对象的引用,但构造器本身没有任何返回值。构造器可以重载,与普通方法一样,通过参数列表来区分重载的方法。如果一个类中没有构造器,则Java会自动添加一个无参的什么都不做的构造器。
重载:对于对象类型,方法重载很容易区分。如果参数中有基本数据类型,因为基本数据类型能从一个较小的类型自动提升到较大的类型,所以在运行是会调用匹配度最高的方法。如:
public void overLoad(int a){
System.out.println("overLoad1"+a);
}
public void overLoad(short a){
System.out.println("overLoad2"+a);
}
public void overLoad(byte a){
System.out.println("overLoad3"+a);
}
public static void main(String[] args) {
byte a = 1;
new CaoZuoFu().overLoad(a);
}
输出为:overLoad31
public void overLoad(int a){
System.out.println("overLoad1"+a);
}
public void overLoad(short a){
System.out.println("overLoad2"+a);
}
// public void overLoad(byte a){
// System.out.println("overLoad3"+a);
// }
public static void main(String[] args) {
byte a = 1;
new CaoZuoFu().overLoad(a);
}
输出为:overLoad21
如果传入的类型大于形参的类型,则必须进行窄化转换才可以调用。
构造器中调用其他构造器:
public class CaoZuoFu {
private int a;
private short b;
public CaoZuoFu(int a){
this.a = a;
}
public CaoZuoFu(int a,short b){
this(a);
this.b = b;
}
}
this关键字在普通方法内部表示调用次方法的对象。
清理:垃圾回收器准备回收对象是,会先调用对象的finalize方法,第二次垃圾回收动作发生时才会清理对象占用的空间。
public class Clear {
private int a;
private short b;
public Clear(int a){
this.a = a;
System.out.println(a);
}
public void finalize(){
System.out.println("delete"+this.a);
}
public static void main(String[] args) {
Clear test = new Clear(1);
Clear test1 = new Clear(2);
test = test1;
System.gc();
}
}
输出:
1
2
delete1
垃圾回收器工作:
引用计数:每个对象上有一个计数器,当有引用连接到次对象是,计数加1,离开时,计数减1,计数为零时,释放空间。速度很慢,用来说明垃圾回收器的工作原理。
停止-复制:遍历所有的引用,将所有指向的对象复制到另一个堆,清理原来的堆。
标记-清理:遍历所有的引用,将所有指向的对象设一个标记,没有被标记的清理。运行是产生垃圾很少时使用。
自适应:自动在停止-复制和标记-清理中切换。
局部变量必须显式的进行初始化,成员变量在对象实例化之前会自动初始化。
可变参数:
public class Clear {
public void printClear(String...strings){
for(String clear:strings){
System.out.println(clear);
}
}
public static void main(String[] args) {
Clear test = new Clear();
test.printClear("a","b","c");
}
}
输出:
a
b
c
如果参数中包含可变参数列表,重载时可在前面添加一个参数区分。
枚举(enum)
重写了toString方法,可以显示摸个enum的名字,ordinal()用来显示声明的顺序,static values方法,按照声明顺序产生这些常量值组成的数组。
enum可以在switch语句中使用。