・ new と null

new は新しいオブジェクトを生成するためのキーワードです。 new の後には生成したいオブジェクトのクラスのコンストラクタが来ます。


Color color = new Color( 255, 0, 0 );  // 赤色のオブジェクトを生成

Javaでは配列のサイズを指定する時にも new を用います。 配列とクラスの取り扱いは非常に似ています。


Color colors[] = new Color[12];  // 12個の要素を持つ Colorの配列を生成

Color colors[]; は Color[] colors; と記述しても同じ意味になります。 配列のサイズの指定は、配列が必要になった時点で行ってかまいません。 またサイズの指定を定数ではなく変数や計算式によって行うことも許されます。 なお、配列を生成しても個々の要素のオブジェクトはまだ生成されていません。 それは改めて個々のオブジェクトごとにコンストラクタを呼び出すことになります。
配列のサイズはどの配列のクラスでも length という一種の publicなフィールドに 格納されています。 したがって、上で定義した配列のサイズは次のようにして いつでも知ることができます。 (配列の要素をループの中で取り扱う時に便利です。)


int count = colors.length;  // 値 12 が返る

null は「オブジェクトが存在しない」ことを表す特別な値です。 どのクラスのオブジェクトにも代入することができます。 (ただし原始型のデータには代入できません。) 宣言だけで生成されていない変数の値は null に初期化されます。 Javaではメモリの解放は明示的に行われません。 不用になったオブジェクトは、 デストラクタに相当するメソッドを呼び出して処理する必要はありません。 単に null を代入するだけでオブジェクトと変数の間の繋がりはなくなります。 どの変数とも繋がりを持たなくなったオブジェクトは、 自動的にガーベッジ・コレクションの対象となります。

オブジェクトを参照する変数はクラスの型を指定して宣言し、 クラスのコンストラクタを用いて生成します。 したがって通常は、オブジェクトが何という名前のクラスなのかは自明です。 しかし外から引数で渡されてきたオブジェクトのような場合には、 それが何というクラスのオブジェクトであるか チェックしたい場合も生じます。
instanceof はそのような時に使用するキーワードです。 instanceof は boolean 型の値を返す2項演算子です。 次のような使い方をします。


if( 変数名 instanceof クラス名 )

先頭の項の変数が参照するオブジェクトが 後の項のクラスに所属するオブジェクトであれば true, そうでなければ false が返ります。