1. 程式人生 > >Java中構造方法、例項方法、類方法的區別

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. 例項方法

        可以通過類的例項呼叫物件的方法,也稱為成員方法。