Java -インスタンス-
データ型には、大きく分けて基本データ型と参照型の2つがあります。
参照型変数を利用して、オブジェクトや配列などの操作を行います。
インスタンス化
インスタンス化とは、実世界のオブジェクトを抽象化してあらかじめ作成しておいたクラスなどから生成する作業のことです。
インスタンスの生成
インスタンスを生成するには、new演算子を利用します。
インスタンスを生成するだけであれば、参照型変数を宣言する必要はありません。
同時に参照型変数を宣言すると、その変数を通して常時そのインスタンスを利用することができます。
new演算子は、単項演算子の1つです。指定したクラスからインスタンス(オブジェクト)を 生成し、そのインスタンスがメモリ上のどこにあるのかを示すアドレス情報を内部的に出力します。
new演算子によって生成されたインスタンスを利用するためには参照型変数と代入演算子(=)を利用して
参照型変数にインスタンスのアドレス情報を代入しておく必要があります。
生成したインスタンスの利用
new演算子により生成したインスタンスは、直接、メンバ変数やメソッドを利用することができます。
メンバ変数・メソッドを利用する場合
new コンストラクタ名(引数).メンバ変数名
new コンストラクタ(引数).メソッド名(引数)
メンバ変数にはインスタンス変数とstatic変数がありますが、どちらも上記の書式によって利用可能です。
参照型変数の宣言
参照型変数は、基本データ型の変数とは異なり、値を直接格納するのではなくインスタンスなどのアドレス情報を格納します。
参照型変数の宣言は、new演算子などによるインスタンスの生成とは別に行うことができます。
参照型変数の宣言
データ型 参照型変数名;
データ型にはクラス名、配列名、インタフェース名、列挙型名のいずれかを指定します。
参照型変数をメンバ変数として宣言すると自動的に初期化され、デフォルト値であるnullが代入されます。
しかし、参照型変数をローカル変数として宣言した場合は自動的には初期化されないので、その変数を利用する前になんらかの値を代入しなければなりません。
参照型変数の初期化
参照型変数を明示的に初期化するには、多くの場合new演算子を利用するか、nullを代入します。
その他の方法としては、メソッドの戻り値による初期化や、既存の参照型変数による初期化があります。
- new演算子を利用
new演算子は、実行結果として新しく生成したインスタンスのアドレス情報を出力するので、その情報を参照型変数に代入することができます。
Person p = new Person();
または
Person p; p = new Person();
- nullを代入
nullは何も参照していないことを表す定数です。
この値を代入することによって初期化を行うことができます。参照型変数の宣言と初期化を同時に行う場合
Person p = null;
または
Person p; p = null;
- 既存の参照型変数を利用
すでに初期化されている別の参照型変数を使って、新しい参照型変数を初期化することもできます。
この場合は、新しいインスタンスは生成されません。
既存の変数と初期化した変数に同じアドレス情報が格納され、同じインスタンスを参照することになります。Person p1 =new Person(); Person p2 = p1;
ただし、この場合は、代入時に右辺に記述する参照型変数(p1)は、左辺の参照型変数(p2)と同じ型であるか、そのサブクラスか、または左辺の参照型変数の型と同じ型にキャストされていなければなりません。
- 参照型変数の更新
参照型変数の初期化後であっても、任意の時点で、格納しているアドレス情報を別の値に変更することができます。
その場合は、代入演算子(=)を利用します。値の変更後は、その参照型変数は別のインスタンスを参照するようになります。