コンストラクタとは

広告

ここではコンストラクタについて見ていきます。コンストラクタとは、クラスからオブジェクトを作成した際に、自動的に実行されるメソッドのことで、メンバ変数の初期化などの主に行います。

まず下記のサンプルを見て下さい。

ctest7.java

class ctest7{
  public static void main(String args[]){
    Television tv1 = new Television();

    tv1.dispChannel();
  }
}

class Television{
  private int channelNo;
  private String housouKyoku;

  public void setChannel(int newChannelNo){
    channelNo = newChannelNo;
    if (channelNo == 1){
      housouKyoku = "FujiTV";
    }else if (channelNo == 3){
      housouKyoku = "NHK";
    }
  }

  public void dispChannel(){
    System.out.println("現在のチャンネルは" + housouKyoku + "です");
  }
}

一見何の問題も無いように見えますが、実際に実行してみると下記のようになります。

p1

チャンネルは「null」と表示されてしまいました。これはメンバ変数の初期化を行っておらず、また一度も値を格納しないままメンバ変数の値を表示しようとしたためです。

このようにクラスからオブジェクトを作成した際に、まずメンバ変数の初期化を行っておかなければいけない場合が多々あります。メンバ変数の定義時に合わせて初期値を代入しておくことでも解決できますが、その場合は固定した値しか設定することが出来ません。

こういった場合にコンストラクタを使います。コンストラクタとは、クラスからオブジェクトが作成された際に、無条件で実行されるメソッドのことで下記のような記述を行います。

クラス名(){
  ....
}

通常のメソッドの戻り値の型指定が無いものと考えて下さい。またメソッド名はクラス名と同じ名前にします。

では実際の例で試してみましょう。

ctest8.java

class ctest8{
  public static void main(String args[]){
    Television tv1 = new Television();

    tv1.dispChannel();
  }
}

class Television{
  private int channelNo;
  private String housouKyoku;

  Television(){
    channelNo = 1;
    housouKyoku = "FujiTV";
  }

  public void setChannel(int newChannelNo){
    channelNo = newChannelNo;
    if (channelNo == 1){
      housouKyoku = "FujiTV";
    }else if (channelNo == 3){
      housouKyoku = "NHK";
    }
  }

  public void dispChannel(){
    System.out.println("現在のチャンネルは" + housouKyoku + "です");
  }
}

実行してみると下記のようになります。

p2

今回はメンバ変数に値を格納するメソッドを呼び出してはいないのですがコンストラクタによってオブジェクト作成時にメンバ変数に初期値が格納されていますので、いきなり現在の放送局について出力しても適切な値が設定されています。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)