new と null
new は新しいオブジェクトのデータを生成するキーワードです。
new の後には生成したいオブジェクトのコンストラクタが来ます。
int a[]; と int[] a;
は同じ意味です。int[] がクラス名と考えればわかりやすいでしょう。 new の後のサイズの指定は次のような形式です。
a = new int[10];
これは、「配列のクラスのコンストラクタが int[] であり、
それに引数 10 を与えてオブジェクトを生成している。
引数はサイズを記憶する変数の値である。」と解釈してください。
実際、配列のサイズはどの配列のクラスでも length という public 変数に
格納されています。したがって、上で定義した配列 a のサイズは次のようにして
いつでも知ることができます。
int count = a.length; // 値 10 が返る
null は「オブジェクトが存在しない」ことを表す特別な値です。 どのクラスのオブジェクトにも代入することができます。 (ただし原始型のデータには代入できない。) 宣言だけで生成されていないオブジェクトの値は null に初期化されています。 Java言語ではメモリの解放は明示的に行われません。 不用になったオブジェクトは、 デストラクタに相当するメソッドを呼び出して処理する必要はありません。 単に null を代入するだけでオブジェクトと変数の間の繋がりはなくなります。 どの変数とも繋がりを持たなくなったオブジェクトは、 自動的にガーベッジ・コレクションの対象となります。
オブジェクトの変数はクラスの型を指定して宣言し、
クラスのコンストラクタを用いて生成します。
したがって通常は、オブジェクトが何という名前のクラスなのかは自明です。
しかし外から引数で渡されてきたオブジェクトのような場合には、
それが何というクラスのオブジェクト(インスタンス)であるか
チェックしたい場合も生じます。
instanceof はそのような時に使用するキーワードです。
instanceof は boolean 型の値を返す2項演算子です。
if( objetcname instanceof ClassName )
先頭の項のオブジェクトが
後の項のクラスに所属するオブジェクト(インスタンス)であれば true,
そうでなければ false が返ります。