Javaに関する様々な情報をご紹介します。

4インスタンス

Javaに関する様々な情報をご紹介します。

インスタンス

このページでは、クラスからインスタンスを生成する方法、インスタンスの状態(メンバ変数)、振る舞い(メソッド)を参照する方法、ガベージコレクションについて説明します。

インスタンスの生成

クラスからインスタンスを生成する際のフォーマットです。

クラス名 変数 = new コンストラクタ名(初期値・・・);

インスタンスの生成は3つの工程に分けることができます。

  1. 変数の宣言(クラス名 変数)

    まずインスタンスの参照情報を代入する変数の宣言を行います。この時点ではまだインスタンスは生成されていません。単にメモリ領域にインスタンスの参照情報を代入する変数が宣言されるだけです。

    変数の宣言
  2. インスタンスの生成(new)

    この時点で初めてメモリ領域にインスタンスを格納するための領域が割り当てられます。new演算子はコンストラクタの呼び出しを行い、変数へ割り当てられたインスタンス領域の参照情報を代入します。

    インスタンスの生成
  3. インスタンスの初期化(コンストラクタ名(初期値・・・))

    インスタンスが生成された後、クラスに設定されたコンストラクタを使用しインスタンスの初期化が行われます。 コンストラクタ名はクラス名と同一です。 (初期値・・・)にはコンストラクタが受け取る引数値が記載されます。詳細はJavaの道:コンストラクタを参照してください。

    インスタンスの初期化

【例1】インスタンス生成の例

//初期値"Hello!"を持つ、StringBufferクラスのインスタンスの生成
//変数ins1に、インスタンスを参照するための情報が代入されています。
StringBuffer ins1 = new StringBuffer("Hello!");


//インスタンスの生成を、変数の宣言とインスタンスの生成・初期化に分けて記載した例
StringBuffer ins1;  //変数の宣言
ins1 = new StringBuffer("Hello!");  //インスタンスの生成・初期化

メンバ変数、メソッドの参照

ここでは生成されたインスタンスの"状態(メンバ変数)"と"振る舞い(メソッド)"を他プログラムから参照する方法について説明します。メンバ変数とメソッドの参照は以下のフォーマットで行います。

変数.メンバ変数;
変数.メソッド;

例えばクラスAから生成したインスタンスのメンバ変数abcを参照したい場合、インスタンスの参照情報が代入されている変数を介し、a1.abcで参照します。メソッドxyzを参照したい場合は、a1.xyz()で参照します。

インスタンスの参照の例

class A {
    String abc = "クラスAのメンバ変数abc";
    void xyz() {
        System.out.println("クラスAのメソッドxyz");
    }
}

public class ExClass31 {
    public static void main(String[] args) {
        A a1 = new A();  //クラスAのインスタンスの生成。インスタンスの参照情報を変数a1に代入
        System.out.println(a1.abc);  //変数a1を介しメンバ変数abcを参照
        a1.xyz();  //変数a1を介しメソッドxyzを参照
    }
}

ここではメンバ変数、メソッドを参照する基本的な方法を説明しました。Javaではその他いくつかの参照方法が用意されています。それらの説明については「Javaの道:static」「Javaの道:thisの利用」を参照してください。

ガベージコレクション

Javaでは不要になったインスタンスのメモリ領域を開放するガベージコレクションと言う仕組みを持っています。他のプログラム言語ではこのメモリ領域の開放をプログラマが意図的に行わなければならない場合もあります。メモリ領域の開放は非常に煩雑な作業であり、また間違いやすいものです。メモリ領域の自動開放はJavaプログラムのメリットの一つです。なお、メソッド内で宣言された引数やローカル変数はそのメソッドが終了するとそれらに割り当てられたメモリ領域も開放されます。

開放されるインスタンスのメモリ領域はそのインスタンスがどのプログラムからも変数を介して参照されなくなった時です。JavaVMに使用しなくなったインスタンスを意図的に通知するためには変数にnullを代入します。

ガベージコレクションを意図的に操作することはできません。Javaにはガベージコレクションに関連するコマンドでgcというものがあります。このコマンドはJavaVMにメモリの最適化を行うよう最大限の努力をすることを通知するものです。

4インスタンス