(本文章仅对上课所学进行总结)
在Java中,使用构造函数(constructor,也称为构造方法)是生成实例对象的唯一途径。在调用new时,既可以带有变量,也可以不带变量,这要视具体的构造方法而定。
调用构造方法时,步骤为:
1.分配新对象的空间,并进行默认的初始化。在Java中这两步是不可分的,从而可确保不会有没有初值的对象;
2.执行显示的成员初始化;
3.执行构造方法。
[显示成员初始化]
在成员说明中有简单的表达式,例如:
public class Initialized{
private int x=5;
private String name="Fred";
private Date created =new Date();
}
即在创建了Initialized的实例,系统为其初始化之后,还要给实例中的变量x,name赋值。
[构造方法]
显示构造方法设定的初值不具有变化性,所以未来实现更一般的操作,系统定义了默认的构造方法,同时允许程序员编写自己的构造方法完成不同的操作,在创建对象实例时由new运算符自动调用。
构造方法的特点:名字与类名相同,没有返回值,方法可重载,必须为所有的变量赋初值,通常要说明为public类型,可以按需包所需的参数列表。
例:
public class Xyz{
//成员变量
int x;
public Xyz(){ //参数表为空的构造方法
//创建对象
x=0;
}
public Xyz(int i){ //带一个参数的构造方法
//使用参数创建对象
x=i;
}
}
[默认构造方法]
每个类都必须至少有一个构造方法,若程序员没有为类定义构造方法,则系统会自动为该类生成一个默认的构造方法。构造方法的参数列表及方法体均为空,所生成的对象的属性也为零或空;若程序员定义了一个或多个构造方法,则将自动屏蔽掉默认的构造方法,且构造方法不能继承。
[构造方法重载]
在进行对象实例化时可能会遇到许多不同情况,于是要求针对所给的不同的参数调运各个不同的构造方法。这时,可以通过在一个类中同时定义若干个构造方法,亦即对构造方法重载来实现,例:
public class Student{
String name;
int age;
public Student(String s,int n){
name=s;
age=n;
}
public Student(String s){
this(s,20);
}
public Student(){
this("Unkonwn");
}
}
[finalize()方法]
finalize()方法属于Object类,当实例对象不被任何变量引用时,Java会自动进行“垃圾回收”,收回该实例所占用的内存空间。
[this引用]
在Java中,如果在类的成员方法中访问类的成员变量,可以使用关键字this指明要操作的对象,例:
public class Date{
private int day,month,year;
public void printDate(){
System.out.println("The current date is (dd/mm/yy):"+this.day+"/"+this.month+"/"+this.year);
}
}
在类方法中,Java自动用this关键字把所有变量和方法引用结合在一起。基于这个原因,上述例子中的this引用是不必要的。
有些情况下关键字this是必须的。例如,在完全独立的类中调用一个方法,同时把对象实例作为一个自变量来传送。此时,要用this指明对哪个对象实例进行操作。例如:
Birthday bDay=new Birthday(this);



