Java-クラス
クラスについて
クラスとオブジェクト
Java言語はオブジェクト指向プログラミング言語です。
データと処理を1つのモジュールとして扱い、「オブジェクト」という単位にまとめます。
オブジェクトを作成するための定義がクラスとなります。
クラスとオブジェクトの関係は以下の通りです。
- クラス
- オブジェクトの型であり、変数とメソッドをまとめたテンプレートです。
- オブジェクト
- クラスを実体化(メモリ上に確保)したオブジェクトの実体です。
インスタンスとオブジェクトの違い
instanceは英語で「例、事例、実例」であり、instantiate「抽象的なことを具体例で示す」となります。
オブジェクト指向では、「オブジェクトAはクラスBのインスタンスである」などと使います。
言い換えれば、「オブジェクト(物体)は様々なクラス(集合)のインスタンス(実例)」ということです。
オブジェクト(インスタンス)の生成と破棄
new演算子を使用して、オブジェクト変数にオブジェクトを生成(代入)します。
クラス名 オブジェクト変数 = new コンストラクタ名(引数);
Javaでは不要になったオブジェクトのメモリ領域を開放するガベージコレクションと言う仕組みを持っています。
プログラマが明示的にメモリの解放を行う必要はありません。
なお、オブジェクト(メモリ領域)の開放は、オブジェクトがいずれからも参照されなくなった時です。
クラスの変数について
クラスに関係する変数は以下3種類です。
- インスタンス変数
- クラス定義内でstatic指定されていない変数です。
- クラスオブジェクト(インスタンス)ごとに生成される変数です。
- クラス変数
- クラス定義内でstatic指定された変数です。
- クラス内で同じ変数が共有されます。
- 静的領域に確保されるので、インスタンスを生成せずに利用することができます。
- ローカル変数
- メソッドやブロック内で宣言した変数です。
- 関数内で一時的に使用できます。
class ValuableField {
// インスタンス変数
int instance_data;
// クラス変数
static int class_data;
public void printInstanceValue(){
System.out.println(instance_data);
}
public void printLocalValue(){
// ローカル変数
int local_data;
local_data = 200;
System.out.println(local_data);
}
}
class Valuable {
public static void main(String[] args){
// 静的領域(クラス変数)をそのまま利用する
ValuableField.class_data = 100;
System.out.println(ValuableField.class_data);
ValuableField obj = new ValuableField();
obj.instance_data = 150;
obj.printInstanceValue();
obj.printLocalValue();
}
}
コンストラクタ(construtor、組立てる者)
コンストラクタとは、オブジェクトを生成する際に自動的に実行される初期化処理です。
クラス名と同じ名前でメソッドを定義します。
戻り値を指定することはできません。
class ConstructorTest {
String data;
ConstructorTest(String name) {
data = name;
}
}
なお、オブジェクトが消滅する際に自動的に実行される処理はデストラクタと呼ばれます。
Javaではガベージコレクションがオブジェクトの破棄を自動的に行うので、デストラクタはサポートされていません。