お品書き
- コンストラクタって?
- Sample
◆コンストラクタって?
今回もメソッド系の復習。
コンストラクト(construct)
組み立てる、作成するという英単語。
javaでのコンストラクタはオブジェクトを作成するための特殊なメソッド。
オブジェクトの初期化に使われる特殊なメソッドを
コンストラクタという。
ルール①:名前がクラスと同じ
ルール②:戻り値を持たない
ルール③:new クラス名(コンストラクタへの引数)←呼び出し側のルール
Sample
一般的にメソッド名は最初小文字スタート
だが、クラス名と同じにするルールの為、大文字スタート。
class Student{
Student(String n){
.
.
}
Student(String n, int e, int m){
.
.
}
}
オーバーロード編でsetDataというメンバー変数の情報を設定するメソッドを復習したが、
今回はそれをそのままコンストラクタに置き換える。
ちなみに、コンストラクタもメソッドの一種なのでオーバーロード出来る。
main( ~ ){
Student stu1 = new Student("大輔"); //右辺の引数の所がコンストラクタの呼び出しになっている
Student stu2 = new Student("湊丞", 75, 100);
型名 変数名 = new クラス名(コンストラクタの呼び出し);
ちなみに、
これまでnew クラス名()とだけ書いてきて、コンストラクタなんて何も宣言していなかったのに、どう動いてた?
と思うかもしれない。
コンストラクタを定義していていない場合は、自動でデフォルトコンストラクタ(引数、処理なし)が生成される。
(例) Student( ){ }
◆Sample
前回のオーバーロードのSampleをベースにSample作成
class Student3{
String name;
int engScore;
int mathScore;
Student3(String n){ //コンストラクタ
name = n;
}
Student3(String n, int e, int m){ //コンストラクタ
name = n;
engScore = e;
mathScore = m;
}
void setScore(int e, int m){
engScore = e;
mathScore = m;
}
void display(){
System.out.println(name + "さん");
System.out.println("英語" + engScore + "点・数学" + mathScore + "点");
}
}
class StuSample3{
public static void main(String[] args){
Student3 stu1 = new Student3("大輔");
Student3 stu2 = new Student3("湊丞", 75, 100);
stu1.setScore(90, 80);
stu1.display();
stu2.display();
}
}
C:\Java\1>java StuSample3
大輔さん
英語90点・数学80点
湊丞さん
英語75点・数学100点
C:\Java\1>
コンストラクタは生成と同時に変数に代入できるため、見やすくなった。
前回までのサンプルだとオブジェクトを生成して値の代入という2ステップがあるため、メンバー変数が設定されていないタイミングが出てしまう。
変数宣言直下にdisplayメソッドを記述すると、中身がない状態で表示されてしまう。
データが空の状態はよろしくないとされている。
それを踏まえてコンストラクタの生成で値の代入が出来るのは、便利でかつ安全だということでよく使われる。
ちなみに、
自分でコンストラクタを定義した場合は、
デフォルトコンストラクタは生成されない
stu3をデフォルトコンストラクタとして作成↓
class StuSample3{
public static void main(String[] args){
Student3 stu1 = new Student3("大輔");
Student3 stu2 = new Student3("湊丞", 75, 100);
Student3 stu3 = Student3(); //デフォルトコンストラクタとして機能するか...
setScore(90, 80);
stu1.display();
stu2.display();
}
}
とするとどうなるか。
C:\Java\1>javac StuSample3.java
StuSample3.java:5: エラー: Student3に適切なコンストラクタが見つかりません(引数がありません)
Student3 stu3 = new Student3();
^
コンストラクタ Student3.Student3(String)は使用できません
(実引数リストと仮引数リストの長さが異なります)
コンストラクタ Student3.Student3(String,int,int)は使用できません
(実引数リストと仮引数リストの長さが異なります)
エラー1個
無事に怒られましたねW