「コンストラクタ」とはインスタンスが作られた直後に一度だけ自動的に呼び出される特殊なメソッドです。
コンストラクタはフィールドの初期化やリソースの初期化(具体的にはメモリ確保やファイル・デバイスのオープンなど)に良く使われています。

以下のコードは Score クラスにコンストラクタを追加した例です。

ソース1:
public class Score {

    public int math;
    public int english;
    
    // コンストラクタ(引数なし)
    public Score(){
    	System.out.println("引数なしコンストラクタ実行");
    }
    
    // 以下のメソッド(average, set_math) は変更無し
   
    public double average(){
    	return (math + english)/2.0;
    }
    
    public void set_math( int s ){
    	math = s;
    }
}

ソース1のフィールド定義の下にある「public SCORE()」がコンストラクタで、

  1. メソッド名がクラス名と同じ
  2. 戻り値が無い

という特徴があります。

ではこの Score クラスを次に示すメインメソッドから使ってみましょう。

ソース2:
public class Main{

	public static void main(String[] args) {

		Score sc_taro = new Score();
		sc_taro.math = 5;
		sc_taro.english = 3;
	
		Score sc_hanako = new Score();
		sc_hanako.math = 80;
		sc_hanako.english = 70;
		
		System.out.println( "太郎: math = " + sc_taro.math+ " english = " + sc_taro.english + " 平均 = " +sc_taro.average());
		System.out.println( "花子: math = " + sc_hanako.math+ " english = " + sc_hanako.english + " 平均 = " +sc_hanako.average());
	}
}

実行結果は次の様になります。

ソース2の実行結果:
引数なしコンストラクタ実行
引数なしコンストラクタ実行
太郎: math = 5 english = 3 平均 = 4.0
花子: math = 80 english = 70 平均 = 75.0

このように、「インスタンスが作成された時にコンストラクタが自動的に実行され」て"引数なしコンストラクタ実行"という文字列が表示されています。

なおコンストラクタは他のメソッドと同様に引数を使うことが出来ます(ソース3)。

ソース3: 引数有りコンストラクタの例
public class Score {

    public int math;
    public int english;
    
    // コンストラクタ(引数有り)
    public Score( int m, int e ){
    	System.out.println("引数有りコンストラクタ実行");
    	math = m;
    	english = e;
    }

    // 以下のメソッド(average, set_math) は変更無し
   
    public double average(){
    	return (math + english)/2.0;
    }
    
    public void set_math( int s ){
    	math = s;
    }
}

ソース3 の Score クラスを次のメインメソッドから使ってみます。
(1)、(2)の行に注目して下さい。

ソース4:
public class Main{

	public static void main(String[] args) {

		Score sc_taro = new Score( 5, 3 ); // (1)
		Score sc_hanako = new Score( 80, 70 ); // (2)
		
		System.out.println( "太郎: math = " + sc_taro.math+ " english = " + sc_taro.english + " 平均 = " +sc_taro.average());
		System.out.println( "花子: math = " + sc_hanako.math+ " english = " + sc_hanako.english + " 平均 = " +sc_hanako.average());
	}
}

実行結果は次の通りです。

ソース 4 の実行結果:
引数有りコンストラクタ実行
引数有りコンストラクタ実行
太郎: math = 5 english = 3 平均 = 4.0
花子: math = 80 english = 70 平均 = 75.0

今度のコンストラクタは引数「 int m, int e 」を持っていて、メインメソッドの(1)、(2)でインスタンスを作成すると同時に math と english の初期値をコンストラクタに渡しています。

ちなみにインスタンスがメモリから削除される時に一度だけ自動実行される「デストラクタ」や「ファイナライザ」という特殊メソッドを持つプログラミング言語もあります。
これらについては今回のアクティビティでは取り扱いませんので、もし興味があれば自分で調べてみましょう。