コンストラクタ this インスタンス - 萌えJava超入門
第十六章 インスタンス

コンストラクタ

コンストラクタは、インスタンスを作るメソッドです。
「this」も一緒に説明しますね。


目次


1.コンストラクタとは

コンストラクタとは、インスタンスを作るメソッドです。
クラス名と同じ名前で記述します。
戻り値はインスタンスなので指定できません。

コンストラクタの書き方
   クラス名( [引数] ){
      //処理
  }

コンストラクタは、インスタンス化するときに実行されます。
コンストラクタの使い方
new クラス名( [引数] )
普通のメソッドと同様に、引数は省略、あるいは複数指定しても構いません。


インスタンスは値を保持しておくのが得意ですよね。
インスタンス化するとき、保持しておきたい値がすでにあることも多いです。
そんな時はコンストラクタを使って、インスタンス化と同時に値を受け取りましょう。
その他にも、インスタンス化するときに行いたい処理があれば、コンストラクタに記述できます。
コンストラクタが実行されるのは、インスタンス化するときだけです。



2.デフォルトコンストラクタ


コンストラクタの記述を省略した場合は、自動的にデフォルトコンストラクタと呼ばれるコンストラクタが作成されます。
デフォルトコンストラクタは、引数が無く、中身も空欄のコンストラクタです。
アクセス修飾子は、publicです。

デフォルトコンストラクタ
    public クラス名(){
        // 空
    }
自動的に作られたデフォルトコンストラクタのイメージ。


new クラス() って今まで使ってきたけど、
知らずにデフォルトコンストラクタを
実行してたってこと?

今までコンストラクタを
記述していなかったからな。
インスタンスを作るだけのコンストラクタを
実行していたわけだ。


3.コンストラクタを使ったサンプルコード

以下のサンプルプログラム Member_05では、コンストラクタで、
no と nameの2つの引数をインスタンス変数に代入しています。

//Member_05.java
class Member_05 {
    private int no;
    private String name;

    //コンストラクタ new演算子で呼び出される
    Member_05(int no, String name){
        this.no = no;
        this.name = name;
    }
    void print(){
      System.out.println(no + " " + name);
    }
}

//Driver_05.java
class Driver_05{
  public static void main(String[] args){
        Member_05 shiz = new Member_05(1, "館石静乃");
        Member_05 maya = new Member_05(2, "桜井真夜");
        Member_05 tema = new Member_05(3, "安堂てまり");

        shiz.print();
        maya.print();
        tema.print();
  }
}

コマンドライン
>javac -encoding UTF-8 Driver_05.java
>java Driver_05
1 館石静乃
2 桜井真夜
3 安堂てまり


Member_05は、インスタンス化するときに
インスタンス変数を初期化する
定番の書き方だ。
同じ変数名を使うのもテンプレだな。
ねえ、this って何?
あっ。
忘れてた。
「this」はインスタンス自身を指す
キーワードだ。


4.thisとは


thisとは
this はインスタンス化した自分自身のこと。

インスタンス変数とローカル変数の名前が重複すると、ローカル変数が優先します。
インスタンス変数を参照したい場合には、this.変数名と表記します。

インスタンス変数への代入
    private データ型 変数名;
    void set変数名(データ型 変数名){
        this.変数名 = 変数名;
    }

プログラム例
    private String name;
    void setName(String name){
        this.name = name;
    }

クラス変数とローカル変数が重複した場合も、
ローカル変数が優先しただろ?
そのときもクラス変数を参照したい場合には
クラス名.変数名 と記述した。
あれと同じだ。

つまり this はインスタンス化しないと使えない。
this.変数名 はインスタンスごとに値が異なる。
あ~。
分かったような気がする。





お疲れ様でした。




© 2019 awasekagami