Previous | Next | Trail Map | Writing Java Programs | オブジェクト、クラス、インタフェース


オブジェクトの作成

Java では、クラスのインスタンスを作成する、換言すればクラスをインスタンス化することによってオブジェクトを作成する。 後述のクラスの作成でクラスを作成する方法を学習する。 それまで、この例では Java 環境ですでに存在するクラスからオブジェクトを作成する。

しばしば、 Java オブジェクトは次のような文で作成される。

Date today = new Date();

これにより、新規 Dateオブジェクトが作成される( Dateは java.util パッケージのクラスである)。 この一文は実際に宣言、インスタンス化(オブジェクトの作成)、初期化の3つの動作を実行する。Date today は変数宣言であり、todayが Date という型のオブジェクトを参照するために使用されることをコンパイラに宣言するだけである。new 演算子は新規 Date オブジェクトをインスタンス化し、 Date() はオブジェクトを初期化する。

オブジェクトの宣言

オブジェクトの宣言はオブジェクト作成に必ずしも必要ではないが、オブジェクト宣言はしばしばオブジェクトの作成と同じ行に現われる。 他の変数宣言のように、オブジェクト宣言は次のように表示される。

Date today;

どちらの方法でも、オブジェクトを保持するために変数を宣言するのは、プリミティブ型の値を保持するために変数を宣言するようなものである。

type name 

ここでは、typeがオブジェクトのデータ型であり、nameがオブジェクトのために使用される名前である。 Java では、クラスとインタフェースがデータ型のように見える。 それで typeは Date クラスあるいはインタフェースの名前のようなクラス名になる。変数とデータ型(in the Writing Java Programs trail)では、変数宣言についてより詳細に説明する。

宣言は、型が typeである変数を参照するためにnameを使用していることをコンパイラに通知する。 宣言はオブジェクトをインスタンス化しない。Date todayは新規 Date オブジェクトを作成するのではなく、Date オブジェクトを保持するために today という変数を作成する。 Date オブジェクト、あるいは他のオブジェクトをインスタンス化するには、 new 演算子を使用する。

オブジェクトのインスタンス化

new演算子は、メモリを割り当てて新規のオブジェクトをインスタンス化する。new演算子は、引数、すなわちコンストラクタを呼び出す必要がある。 コンストラクタメソッドは、その型の新規オブジェクトを初期化にするために各 Java クラスが提供する特別なメソッドである。 new 演算子がオブジェクトを作成し、コンストラクタはそれを初期化する。

ここで Rectangle オブジェクトを作成するために new 演算子を使用した例を示す(Rectangleは java.awt パッケージのクラスである)。

new Rectangle(0, 0, 100, 200);

例では、 Rectangle(0, 0, 100, 200)は Rectangle クラスのコンストラクタの呼び出しである。

new 演算子は新たに作成したオブジェクトへの参照を返す。 この参照が適切な型の変数に割り当てられる。

Rectangle rect = new Rectangle(0, 0, 100, 200);

変数とデータ型によるとクラスは本質的に新規参照データ型を定義する。 それにより、Rectangleは Java プログラムでデータ型として用いられることができる。 rect のようにデータ型が参照型である変数の値は、実効値への参照(他の技術用語でのポインタ)、あるいは変数が表す値のセットである。 この解説書では、参照が参照しているデータによって、オブジェクト参照あるいは配列参照と呼ばれる。)

オブジェクトの初期化

前述の通り、クラスはその型の新規オブジェクトを初期化するコンストラクタメソッドを提供する。新規オブジェクトを様々な方法で初期化する、 多数のコンストラクタを提供するかもしれない。 クラスの実装を見ると、それらがクラスと同一名を持ち、返り値の型を持っていないので、コンストラクタだとわかる。 この節の始めで使用した Date オブジェクトの作成では、 Date コンストラクタは引数を取らない。

Date() 

このような引数を取らないコンストラクタは、デフォルトコンストラクタとして知られている。 Date のように、ほとんどのクラスは少なくとも1つのコンストラクタ、デフォルトコンストラクタを持っている。

クラスが多数のコンストラクタを持っている場合、それらはすべて同一名であるが、引数の数や型は異なる。 それぞれのコンストラクタは異なる方法で新規オブジェクトを初期化する。 デフォルトコンストラクタが新規 Date オブジェクトを初期化するために使用されるのに加えて、Date クラスは年、月、日など新規の Date を初期化する別のコンストラクタを提供する。

Date MyBirthday = new Date(1963, 8, 30);

コンパイラは引数の型と数によって、コンストラクタを区別することができる。

この節では、コンストラクタの使用方法について説明した。 後半では、クラスのコンストラクタメソッドの書き方について説明する。


Previous | Next | Trail Map | Writing Java Programs | オブジェクト、クラス、インタフェース