「コンストラクタとメンバへのアクセス」の編集履歴(バックアップ)一覧はこちら
「コンストラクタとメンバへのアクセス」(2008/01/14 (月) 22:55:13) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*[[java]]
- コンストラクタはオブジェクトが生成される時に呼び出される。
- 修飾子を設定できる。&bold(){public,protected,private}
- 引数を受け取るコンストラクタの定義も可能
- 宣言で例外を指定する事も可能
- 引数や型の異なるコンストラクタの複数定義も可能
**sample
class sample
{
public SampleClass() // default
public SomeClass(int count) // コンストラクタのオーバーロード
}
+ コンストラクタには、フィールドの初期化処理などオブジェクトが生成されたときに最初に実行される処理を記述する
+ インスタンス変数の場合、&bold(){数値は0、ブール値はfalse、参照変数はnull}に暗黙的に設定される
+ ローカル変数は明示的に初期化する必要あり
+ コンストラクタをオーバーロードする場合、this()を使ってコンストラクタの中でオーバーロードされたほかのコンストラクタを呼び出すことが可能
**sample
class SomeClass
{
public SomeClass() // default
{
this(20); // もう一つのコンストラクタを呼び出す
}
public SomeClass(int count) // コンストラクタのオーバーロード
{
・・・
}
}
**javaにはデストラクタはない
- 自動的にガベージコレクションを行うため明示的にメモリを開放すつ必要がない
- 明示的にする場合には、&bold(){finalize method}で実装する。
- このmethodはインスタンスへの参照はもうないとガベージコレクションにより判断された場合に、ガベージコレクタにより呼び出される。
*[[java]]
- コンストラクタはオブジェクトが生成される時に呼び出される。
- 修飾子を設定できる。&bold(){public,protected,private}
- 引数を受け取るコンストラクタの定義も可能
- 宣言で例外を指定する事も可能
- 引数や型の異なるコンストラクタの複数定義も可能
**sample
class sample
{
public SampleClass() // default
public SomeClass(int count) // コンストラクタのオーバーロード
}
+ コンストラクタには、フィールドの初期化処理などオブジェクトが生成されたときに最初に実行される処理を記述する
+ インスタンス変数の場合、&bold(){数値は0、ブール値はfalse、参照変数はnull}に暗黙的に設定される
+ ローカル変数は明示的に初期化する必要あり
+ コンストラクタをオーバーロードする場合、this()を使ってコンストラクタの中でオーバーロードされたほかのコンストラクタを呼び出すことが可能
**sample
class SomeClass
{
public SomeClass() // default
{
this(20); // もう一つのコンストラクタを呼び出す
}
public SomeClass(int count) // コンストラクタのオーバーロード
{
・・・
}
}
**javaにはデストラクタはない
- 自動的にガベージコレクションを行うため明示的にメモリを開放すつ必要がない
- 明示的にする場合には、&bold(){finalize method}で実装する。
- このmethodはインスタンスへの参照はもうないとガベージコレクションにより判断された場合に、ガベージコレクタにより呼び出される。
**コンストラクタの定義方法と使用方法と示すプログラム
public class ConstructorTest
{
public static void main(String[] args)
{
System.out.println("デフォルトコンストラクタ");
ConstructorTestClass obj1 = new ConstructorTestClass();
System.out.println("obj1.getCounter() ----->" + obj1.getCounter());
System.out.println("obj1.getMessage() ----->" + obj1.getMessage());
System.out.prinln();
System.out.println("int型の引数を取るコンストラクタ");
ConstructorTestClass obj2 = new ConstructorTestClass(40);
System.out.println("obj2.getCounter() ----->" + obj2.getCounter());
System.out.println("obj2.getMessage() ----->" + obj2.getMessage());
System.out.println();
System.out.println("int型とString型を受け取るコンストラクタ");
ConstructorTestClass obj3 = new ConstructorTestClass(60,"Unko!!!");
System.out.println("obj3.getCounter() ----->" + obj3.getCounter());
System.out.println("obj3.getMessage() ----->" + obj3.getMessage());
}
}
class ConstructorTestClass
{
private int counter;
private String message;
public ConstructorTestClass()
{
this(20,"メッセージ");
}
public ConstructorTestClass(int c)
{
this(c,"メッセージ");
}
public ConstrucotrTestClass(int c,String m)
{
setCounter(c);
setMessage(m);
}
public String getMessage()
{
return message;
}
public void setMessage(String s)
{
message = s;
}
public int getCounter()
{
return counter;
}
public void setCounter(int c)
{
counter = c;
}
}
+ オーバーロードで3つのコンストラクタを作成
+ 2つの引数を取るコンストラクタでは渡された値をインスタンス変数に設定
+ ほかのコンストラクタではthis()によりこのコンストラクタを呼び出して初期化処理を実行
+ その際、呼び出し元から値を渡していない場合にはデフォルト値を渡す