Java中構造方法、例項方法、類方法的區別
1. 構造方法
構造方法負責物件的初始化工作,為例項變數賦予合適的初始值。必須滿足以下的語法規則:
- 方法名與類名相同;
- 不要返回型別(例如return、void等);
- 不能被static、final、native、abstract和synchronized修飾,不能被子類繼承。
例如以下例子:
public class Sample{
private in x;
public Sample(){ //不帶引數的構造方法
this(1);
}
public Sample(int x){ //帶引數的構造方法
this.x=x;
}
public int Sample(int x){ //不是構造方法,return
return x++;
}
}
1.1. 預設構造方法
預設構造方法時沒有引數的構造方法,分為
a.隱含的預設構造方法:public ClassName(){}
b.程式顯示定義預設構造方法:public Employee(){this("無名氏");}
可以呼叫ClassName類的預設構造方法來建立物件,沒有預設構造方法則不合法,例如:
ClassName c=new ClassName(); //此語句合法
1.2. 過載構造方法
通過new建立一個物件後,在不同的條件下,物件可能會有不同的初始化行為,可以通過過載構造方法來表達物件的初始化行為。具體參考this關鍵字的用法。
1.3. 子類呼叫父類的構造方法
父類的構造方法不能被子類呼叫,可以通過super語句呼叫父類的構造方法。例如:
public class MyExpection extends Exceptio{
public MyException(){
//呼叫Exception父類的Exception(String msg)方法
super("Something is error!");
}
public MyException(String msg){
//呼叫EXception父類的Exception(String msg)方法
super(msg);
}
}
用super呼叫父類的構造方法必須遵守以下規則:
1. 子類的構造方法中不能直接通過父類的方法名呼叫父類的構造方法,使用super語句;
2. 加入在子類的構造方法中有super語句,它必須作為構造方法的第一條語句(同this語句);
1.4. 構造方法的作用域
- 當前類的其他構造方法通過this語句呼叫;
- 當前類的子類的構造方法通過super語句呼叫;
- 在程式中通過new語句呼叫。
1.5. 構造方法的private訪問級別
構造方法為private級別時,意味著只能在當前類中訪問它:當前類的其他構造方法中可以通過this語句呼叫,此外還可以在當前類的成員方法中使用new呼叫。
以下場合中,可以把類的所有構造方法宣告為private:
- 這個類中僅僅包含一些供其他程式呼叫的靜態方法,沒有任何例項方法。
- 禁止這個類被繼承。宣告為private後,如果定義了它的子類,子類的方法中無法呼叫父類的任何構造方法。
- 類需要把構造自身例項的細節封裝起來,不允許其他程式通過new語句建立這個類的例項。提供靜態方法。
2. 類方法
用static關鍵字修飾,可以直接通過類名呼叫,不需要建立類的物件來呼叫該方法。
3. 例項方法
可以通過類的例項呼叫物件的方法,也稱為成員方法。