コンストラクタ

2010 年 5 月 30 日 日曜日  【 カテゴリー: Javaの基本


今回はコンストラクタについてみていきます。

コンストラクタ

Wikipedia >>  オブジェクト指向 を引用します。

コンストラクタ(構築子、Constructor)は、オブジェクト指向のプログラミング言語で新たなオブジェクトを生成する際に呼び出されて内容の初期化などを行なう関数、メソッドの事。

コンストラクタとの宣言

コンストラクタもメソッドに似ていますが、インスタンス生成のときに1回だけ呼び出されるという動作の違いがあります。通常のメソッドと比較しながら記述の違いをみてみます。

  • 通常のメソッド
返却値の型 メソッド名(仮引数の型 仮引数, ....){
    処理内容;
    return 返却値
}
  • コンストラクタ
クラス名(仮引数の型 仮引数, ....){
    処理内容;
}

では違いをみていきます。

  1. 通常のメソッドは任意にメソッド名を指定することができますが、コンストラクタは必ず「クラス名」になります。
  2. 通常のメソッドはメソッド名の前に返却値の型(返却値がなければvoid) を記述しましたが、コンストラクタには記述がありません。
  3. 通常のメソッドは返却値を指定することができますが、コンストラクタは返却値の指定はできません。 「return」は記述できましたが返却値を指定するとエラーになりました。

サンプル

【ConstructorTest.java】

class ConstructorTest {
	ConstructorTest() {
		System.out.println("コンストラクタ実行");
	}
}

コンストラクタのみあるクラスです。2行目がコンストラクタの宣言です。コンストラクタ名はクラス名と同じで返却値の型の指定がありません。

【Sample01.java】

public class Sample {
    public static void main(String[] args) {
    	ConstructorTest object = new ConstructorTest();
    }
}
コンストラクタ実行

3行目でインスタンスを生成しています。
「new」の後に ConstructorTest() という記述があります。
これがコンストラクタの呼び出しです。
実行結果をみるとインスタンスを生成しただけでコンストラクタの処理が実行されていることがわかります。

コンストラクタの省略

java075

コンストラクタは省略してもエラーになりません。省略した場合、コンパイル時に仮引数も処理もないコンストラクタが自動生成されて処理されます。よってインスタンス生成のときには 「new」の後にコンストラクタの呼び出しをしても問題ありません。この自動生成されるコンストラクタを デフォルトコンストラクタ といいます。

返却値の型を記述した場合

【ConstructorTest.java】

class ConstructorTest {
	void ConstructorTest() {
		System.out.println("コンストラクタ実行?");
	}
}

今度は2行目で返却値の型「void」を記述しました。それ以外はコンストラクタの記述と同じでメソッド名 とクラス名を同じにし返却値もありません。

【Sample01.java】

public class Sample {
    public static void main(String[] args) {
    	ConstructorTest object = new ConstructorTest();
    	System.out.println("インスタンス生成後");
    	object.ConstructorTest();
    }
}
インスタンス生成後
コンストラクタ実行?

実行結果をみてみると4行目の「インスタンス生成後」という表示処理の前には何も表示がありません。つまり、「new」の後の ConstructorTest() は、クラス「ConstructorTest」で記述した「ConstructorTest()」を実行していません。では何を実行しているのかというとデフォルトコンストラクタを呼び出しています。コンストラクタは「返却値の型をもたない」という規約がある為、規約に従っていないのでコンストラクタと認識されていません。では、どういう扱いになるかというと通常のメソッドです。ですので5行目のように通常のメソッドの処理をすれば実行されます。

Javaではコンストラクタはフィールドやメソッドであるメンバに含まれないようです。ということはメソッドではありません。コンストラクタとメソッドは別物なので、「コンストラクタ」と「クラス名と同じメソッド」が混ざってもきちんと区別されて処理されます。


にほんブログ村 IT技術ブログ Webサイト構築へ
にほんブログ村
【WEBサイト構築・プログラムブログ】
ランキング参加中!よろしければ「クリック」お願いします。
にほんブログ村 IT技術ブログ プログラム・プログラマへ
にほんブログ村
2010 年 5 月 30 日 日曜日  【 カテゴリー: Javaの基本

コメントをどうぞ

※管理者による確認後に表示されます。表示までしばらくお待ちください。