*首先先理解創建一個對象時,系統所要完成的3個工作:
1>爲每個對象分配不同的存儲空間,即不同的實例化對象要有不同的地址空間;(也可以理解爲有多個對象同時指示着同一個實例)
2>如果類定義有初值,使用該值對成員變量進行初始化;如果沒有,可以使用默認值;
3>自動調用構造函數,如果構造方法有多個,則根據參數類型、個數選擇調用哪個構造方法;
看如下一個程序:
package 複數;
class Circle {
float x, y;
float radius;
double getArea() {
return radius * radius * 3.1415926;
}
double getCircumference() {
return 2 * radius * 3.1415926;
}
public static void main(String args[]) {
Circle c = new Circle();
c.radius = 3;
c.x = 0;
c.y = 0;
System.out.println("Area=" + c.getArea());
System.out.println("getCircumference=" + c.getCircumference());
}
}
我們都知道由類定義一個對象,在定義這個對象時,可以直接調用了類中的構造方法對類中的變量進行初始化。
同時定義一個類時可以寫構造函數也可以不寫構造函數,在有構造函數時我們可以按照上述的方法對新定義的對象進行初始化,但是當沒有寫構造函數時系統自然也會有一種默認的處理方式。就是如上述程序中寫的那樣Circle c = new Circle();只是此中的形式不對c對象中的變量做初始化。想要對c對象中的變量初始化可用這種形式c.x = 0;當這些變量被初始化之後則Circle類中的其他方法也就認爲這些變量已知,如c.getArea()這中操作也就可以被執行了。
在此延伸一下構造函數的某些功能:子類在繼承一個超類時,構造函數是不可以被繼承的。一個類要想獲得一個構造函數只有兩種辦法,一是重寫構造函數(即將超類中的構造函數形式借過來但是名字要改成自己的類名),一是根本不寫構造函數,這時系統爲每個類生成一個默認的構造函數這與上述的Circle c = new Circle()對應;