Java Technology

[Java] thisとはどんな時に使うのか

2020-12-26

ウェブアプリケーションを作ってる際に、this.〇〇みたいなものがたくさん出てきていきなりよくわからなくなったので、整理。

ちなみにthisとしては、二種類の使われ方がある。

  1. 変数としてのthis
  2. メソッドとしてのthis()

今回は変数としてのthisの使い方を整理した。


thisの使い方その1

クラスの変数であるフィールド変数とメソッドのローカル変数で名前が同じだった時に、どっちの変数を使いたいのか特定するために利用されることが多い。


なぜ特定する必要があるの?

変数は場所によって優先される範囲がある。

メソッド内では、クラス変数(フィールド変数)より、ローカル変数が優先される。

この時、この場所でクラス変数を使いたいのに、ローカル変数が呼び出されてしまう...というような困りごとを、thisは解決してくれる。


例を見てみる

下記の例では、Mainクラスの変数に入っている十勝岳より優先して、ローカル変数の中に入っている八甲田山が出力されている。

public class Main {

   //クラスの変数
   String mountain = "十勝岳";
 
  //メソッド
   public static void main(String[] args) {
      
      //ローカル変数
      String mountain = "八甲田山";
    
      // "八甲田山"が出力
      System.out.println(mountain);
  }
    
}

では、Mainクラスの変数を呼び出したい時はどうすれば良いのか?



上記の例によって、thisをつけることによって、クラス変数とローカル変数を識別して、呼び出すことができる。

class Main {
  
   //Mainクラス変数
   String mountain = "十勝岳";
 
  //mountainNameメソッド定義
   void mountainName() {
    //ローカル変数
     String mountain = "八甲田山";
     //ローカル変数が呼び出される
     System.out.println(mountain);
     //thisを使うと、クラス変数が呼び出される
     System.out.println(this.mountain);
   }
 
   public static void main(String args[]) {
     // インスタンスを生成
     Main mountain1 = new Main();
   
     //MainクラスのmountainNameメソッドを呼び出し
     mountain1.mountainName(); 

   }
}


thisの使い方その2

thisをメソッドの戻り値にすることで、複数のメソッドを連結して使えるようになる。



class Main {
   String mountainName;
   int mountainHeight;
   
  //thisをメソッドの戻り値に設定 
  Main setName(String mountainName) {
   this.mountainName = mountainName;
   return this;
  }
  
  //thisをメソッドの戻り値に設定 
  Main setHeight(int mountainHeight){
    this.mountainHeight = mountainHeight;
    return this;
  }
  
  void introduce(){
    System.out.println("この山の名前は" + mountainName + "です。");
    System.out.println("この山は標高" + mountainHeight + "mあります。" );
  }
  
 
   public static void main(String[] args) {
    //Mainクラスのインスタンスを生成
    Main mountain1 = new Main();
    //thisを使えばメソッドを連結できる
    mountain1.setName("大雪山").setHeight(2290).introduce(); 
   }
}

thisを戻り値とするやり方を使うことで、ゲッターやセッターなどといった概念にも繋がっていく。

-Java, Technology