Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 > Java基本 > クラス −10.thisの利用
更新日:2005/7/25
クラス−10.thisの利用
このページでは、thisの利用方法についての説明します。
概要
thisはインスタンスメソッド内、コンストラクタ内で使用し、現在処理を行っているオブジェクトを表します。staticで説明しましたが、インスタンスメソッドやコンストラクタから他のメソッドやメンバ変数を参照する場合、オブジェクト変数を指定せず参照することができます。それは、インスタンスメソッド、コンストラクタは現在のオブジェクトを表すthisを持っているためです。単純名で参照していますが、実はコンパイラによりthis.単純名に変換されています。これらの理由より、オブジェクトに依存しないクラスメソッド内ではthisを使用することはできません。
thisの利用
使用方法

thisは以下のケースにおいてよく使用されます。

1.メンバ変数の隠蔽を行う場合、インスタンスメソッド内、コンストラクタ内で隠蔽されたメンバ変数を参照する際に使用します。

this.メンバ変数;

2.複数のコンストラクタを宣言し、あるコンストラクタから別のコンストラクタを参照する場合に使用します。この例の詳細についてはコンストラクタを参照してください。

this(引数値,・・・);

Javaでは、プログラムの保守性の観点より、メンバ変数を直接変更するのではなく、メソッドやコンストラクタを通して、変更することが推奨されています。その際、メンバ変数はクラス外から直接変更されることがないため、privateアクセスレベルを付与して宣言されます。これらのことはメンバ変数の隠蔽と呼ばれています。

メンバ変数をインスタンスメソッド内、コンストラクタ内で変更する場合、プログラムの可読性を考慮し、引数名をメンバ変数名と同じにするケースが多く見られます。その際、どちらの変数がメンバ変数なのかを特定するためにthisを使用します。

【例1メンバ変数の隠蔽にthisを使用した例です。

class ExClass13{
  //(1)メンバ変数value1、value2を宣言
  private int value1 = 10;
  private int value2 = 10;

  //(2)メンバ変数を変更するchMemberメソッド
  void chMember(int value1, int value2) {
    this.value1 = value1;  //(4)
    value2 = value2;  //(5)
    System.out.println("value1:" + this.value1);  //(6)
    System.out.println("value2:" + this.value2);  //(7)
  }

  public static void main(String[] args) {
    ExClass13 object1 = new ExClass13();
    object1.chMember(20, 20);  //(3)
  }
}

【解説1

(1). メンバ変数value1、value2を宣言し、値10を代入します。
(2). メンバ変数を変更するchMemberメソッドを宣言し、引数名をメンバ変数と同じ名前とします。
(3). chMember変数を呼び出し、引数に値20を取ります。
(4). メンバ変数のvalue1に値20を代入します。chMemberの引数であるvalue1からメンバ変数のthis.value1へ値の代入を行います。
(5). chMemberの引数であるvalue2から同じくchMemberの引数であるvalue2へ値20の代入を行います。thisを使用しないでvalue2の参照を行った場合は、引数に設定されたvalue2が優先されます。引数に指定された引数名がvalue2でない場合は、メンバ変数が参照されます。
(6). メンバ変数value1の表示を行います。値が変更されていますため20が表示されます。
(7). メンバ変数value2の表示を行います。値が変更されていませんため10が表示されます。
【実行結果1】
D:\JAVA>javac ExClass13.java

D:\JAVA>java ExClass13
value1:20
value2:10

D:\JAVA>



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道