名詞解釋
一般我們講的“函式”就是“方法”;
構造函式=構造方法;
有些地方還將它稱為構造子、構造器。
一般情況下,我們叫它構造函式或者構造方法。
特點
構造方法是一種特殊的方法,具有以下特點。
(1)構造方法的方法名必須與類名相同。
(2)構造方法沒有返回值類型,可以有return,但是不能有返回值,在這裡只是表示結束,並不是返回的表示,一般也不使用return。
(3)構造方法的主要作用是完成對象的初始化工作,它能夠把定義對象時的參數傳給對象的域。
(4)一個類可以定義多個構造方法,如果在定義類時沒有定義構造方法,則編譯系統會自動插入一個無參數的默認構造方法,這個構造方法不執行任何代碼。
(5)構造方法可以重載,以參數的個數,類型,順序。
構造函式的調用
java構造函式的調用問題//不能繼承
(1)子類只調用父類的默認(預設)構造函式,即無形參構造函式。如果父類沒有默認構造函式,那子類不能從父類調用默認構造函式。
(2)子類從父類處調用父類默認構造函式,不能成為子類的默認構造函式。
(3)在創建對象時,先調用父類默認構造函式對對象進行初始化,然後調用子類自身自己定義的構造函式。
(4)如果子類想調用父類的非默認構造函式,則必須使用super來實現。
(5)子類必須調用父類的構造函式。可以通過系統自動調用父類的默認構造函式,如果父類沒有默認構造函式時,子類構造函式必須通過super調用父類的構造函式。
執行過程
java 構造函式的執行過程
類初始化時構造函式調用順序:
(1)初始化對象的存儲空間為零或null值;
(2)調用父類構造函式;
(3)按順序分別調用類成員變數和實例成員變數的初始化表達式;
class Dollar {
Money m = new Money();
Rmb r = new Rmb();
public Dollar() {
System.out.println("Dollar is constructor.");
}
public static void main(String[] args) {
new Dollar();
}
}
class Money {
public Money() {
System.out.println("Money is constructor.");
}
}
class Rmb {
public Rmb() {
System.out.println("RMB is constructor.");
}
}
輸出結果:
Money is constructor.
RMB is constructor.
Dollar is constructor.
不同之處
JAVA 與C#構造函式執行順序的不同之處
public static void main(String[] args)
{
Child child = new Child();
}
}
class Parent
{
Parent()
{
System.out.println("to construct Parent.");
}
}
class Child extends Parent
{
Child()
{
System.out.println("to construct Child.");
}
Delegatee delegatee = new Delegatee();
}
class Delegatee
{
Delegatee()
{
System.out.println("to construct Delegatee.");
namespace ConsoleApplication1
{
public class Test
{
public static void Main(String[] args)
{
Child child = new Child();
}
}
class Parent
{
public Parent()
{
Console.WriteLine("to construct parent");
}
}
class{
public Child()
{
Console.WriteLine("to construct Child.");
}
Delegatee delegatee = new Delegatee();
}
class Delegatee
{
public Delegatee()
{
Console.WriteLine("to construct Delegatee.");
}
}
}
結果是
to construct Delegatee.
to construct Child.
to construct Parent.