2007/05/23(水)Javaのコンストラクタ

ちょっとJavaのお話が出てきたので,個人的見解を書きつづってみる.

コンストラクタ

コンストラクタを初期化と訳すことは多いけど,実際に行っているのはそのクラスのインスタンスの“構築”.
メモリ中から必要な分だけ確保してインスタンスとし,インスタンス中のデータメンバに初期値を代入することができます.
このことから,初期化も行っているにすぎません.
(Javaのマニュアル中でも,コンストラクタ中では“構築”と表現して,“初期化”とは表現していないはずです.)

インスタンスにおける初期化はイニシャライザで行います.

public class a {
	{
		x = 1;
		y = 2;
	};
	public int x, y;

	public a(){};
	public static void main(String args[]){
		a data = new a();
		System.out.printf("%d %d", data.x, data.y);
	}
}

ここにある無名のメソッドがイニシャライザになります.

また,利用するクラスによっては,構築後に初期化が必要な場合もあります.
特に,ネットワーク接続系のクラスに多いようで,接続後,相手に合わせてこちらのデータメンバを初期化し直す必要があったりします.
この場合,通常initというメソッドをオーバーライドし,初期化処理を行うことになります.

ちなみに,インスタンスが破棄されるときにはデストラクタ(ファイナライザ)が実行されます.

インスタンス

インスタンスとはオブジェクトに近い概念です.
どちらかというと,インスタンスは実体,オブジェクトは概念的な意味合いが強い気がします.

メソッド

関数の一種でインスタンスに対する操作手続き?かな.
純粋に関数といった場合,クラス中のstaticメンバなどのインスタンスに依存しないメソッドでしょうか.