[PR] 迷惑メール トップページプロ3ゼミJavaJava入門講座二学期単位7 →3時間目

3時間目 コンストラクタ

7−3−1.コンストラクタの必要性

 クラスをインスタンス化する事によって、オブジェクトを生成できるわけですが、オブジェクトを生成する とはどういうことかをもう一度考えて見て下さい。
クラスは、型ですから宣言しただけでは実体が有りません。
オブジェクトを生成、つまり、インスタンスする事によってオブジェクトが生成できるのですが、必ずそこで しなくてはいけない事もあります。
例えば、パソコンを立ちある時には、様々なプログラムが読み込まれ処理されています。
この初期処理がされるからこそ私たちはパソコンを使う事ができるのです。
その時には、毎回メソッドを呼ぶのでは面倒ですし、呼ぶのを忘れてしまう可能性も有ります。
コンストラクタは、クラスをインスタンス化した時に呼び出されます。
コンストラクタに、初期化処理を記述すればクラスを使う時に、面倒ではありませんし呼び忘れを防止できま す。

7−3−2.コンストラクタの構文

 コンストラクタは、クラスの宣言時に記述します。
以下は、コンストラクタの構文です。
class クラス名 {
    識別子 クラス名(引数) {
        文
    }
}
 コンストラクタは、クラス名と同じ名前でメソッドのように書きます。
「識別子 クラス名(引数)」で定義しますので、戻り値は必要ありません。
インスタンス化は、オブジェクト生成して変数に代入しオブジェクトを渡すから戻り値は書きません。
アクセス方法は、「クラス名.クラス名(引数)」でアクセスすれば、指定したコンストラクタが呼び出されます。
次に、コンストラクタのサンプルプログラムをご覧下さい!
Sample7_3_1.java
// テスト用の計算機
class Constructor {

    private int data;   // データ

    // コンストラクタ
    public Constructor() {

        System.out.println("コンストラクタ");

        data = 10;
    }

    // データを返す
    public int getData() {

        return data;
    }
}

public class Sample7_3_1 {

    public static void main(String[] args) {

        Constructor obj = new Constructor();

        // obj.Constructor(); // コンパイルエラー

        System.out.println(obj.getData());

    }
}
  
コンストラクタ
10

 データの初期値が10である場合は、コンストラクタの処理で初期化することでオブジェクト生成時にデータ に10が代入されます。
もし、コンストラクタでデータに10を代入しなければ、サンプル1は、「0」が出力されます。
フィールドで日付などを処理している場合などは、今日の日付を代入するなどの初期化を行えば毎回設定せずに済み ます。

7−3−3.デフォルトコンストラクタ及びオーバーロード

 今まで、クラスを作成する時には、コンストラクタを記述していませんでしたが、その時にもコンストラク タが処理されていました。
Javaでは、このコンストラクタをデフォルトコンストラクタと呼びます。

 デフォルトコンストラクタは、クラス作成時に何もコンストラクタが宣言されていない時に呼び出されま す。
以下がデフォルトコンストラクタです。
public クラス名() {
}

識別子が「public」で宣言され、引数は何も指定されていなく、処理もありません。
この暗黙の内に呼ばれているデフォルトコンストラクタが密かに動いていた訳で、クラスにコンストラクタを 記述しなくてもオブジェクトを生成できたのです。
又、引数が無いコンストラクタもまたデフォルトコンストラクタと呼ばれます。

 メソッドにオーバーロードが作成できましたが、コンストラクタにもオーバーロードを使う事が出来ます。
以下のサンプルプログラムをご覧下さい!

Sample7_3_2.java
// テスト用の計算機
class ConOverload {

    private int data1;  // データ1
    private int data2;  // データ2

    // デフォルトコンストラクタ
    public ConOverload() {

        System.out.println("デフォルトコンストラクタ");
        data1 = 10;
        data2 = 10;
    }

    // 引数がint型のコンストラクタ
    public ConOverload(int data) {

        this();
        System.out.println("ConOverload(int, int)");
        data1 = data;
    }

    // データ1を返す
    public int getData1() {

        return data1;
    }

    // データ2を返す
    public int getData2() {

        return data2;
    }
}

public class Sample7_3_2 {

    public static void main(String[] args) {

        ConOverload obj1 = new ConOverload();
        System.out.println(obj1.getData1());
        System.out.println(obj1.getData2());

        System.out.println();

        ConOverload obj2 = new ConOverload(20);
        System.out.println(obj2.getData1());
        System.out.println(obj2.getData2());

    }
}
  
デフォルトコンストラクタ
10
10

デフォルトコンストラクタ
ConOverload(int, int)
20
10

 オーバーロードしたメソッドの処理には、「this()」がありますが、これはデフォルトコンストラクタを呼 び出しています。

2時間目 オーバーロードに戻る     4時間目 クラス及びインスタンスの要素に進む

単位7 クラスの特徴に戻る

トップページに戻る