第2章 クラスの基本
2.5 thisキーワードについて
クラス内に定義したメンバで使用できる「this」キーワードについて説明していきます。
2.5.1 thisキーワードとは
クラス内に宣言しているメンバの頭に「this.」を付けることで、「オブジェクト自身のフィールド変数」、「オブジェクト自身のメソッド」と言う意味が追加されます。thisキーワードを利用することで他の変数名(引数の変数またはローカル変数)と区別し一目で、クラス内のメンバである事が分かるようになります。
以下に基本構文を示します。
2.5.2 thisキーワードを使っていないプログラムの再確認
これまでに学習してきたクラスでは以下のようにソースコードを記述してきたと思います。2.3.6項で作成したComputer5クラスを例にソースコードを示します。
Computer5クラス
6 | public void showComputer(){ |
7 | System.out.println( "パソコンの情報を表示します。" ); |
14 | System.out.println( "OSは「" + os + "」です。" ); |
15 | System.out.println( "メモリサイズは「" + memory + "MByte」です。" ); |
19 | public String getOs(){ |
24 | public int getMemory(){ |
29 | public void setOsMemory(String name, int size){ |
32 | System.out.println( "OSを「" + name + "」に、メモリサイズを「" + size + "MByte」に変更しました。" ); |
このComputer5クラスを見てもらうと分かりますが、どこにも「this」というキーワードは使用していないことが分かります。特にthisキーワードを使わなくても問題はありませんが、thisキーワードを利用することで便利になることがあります。
では次項で「this」キーワードを利用したプログラムを紹介します。
2.5.3 thisキーワードを使ったプログラム
thisキーワードを利用したクラスのオブジェクトを生成し、そのオブジェクトメンバにアクセスするプログラムです。
① ソース・フォルダー: myproj_basic/src
② パッケージ: jp.co.f1.basic.ch02
③ 名前: ThisKeyWord
④ 作成するメソッド・スタブの選択: public static void main(String[] args) にチェックを入れる
1 | package jp.co.f1.basic.ch02; |
8 | public void showComputer() { |
9 | System.out.println( "パソコンの情報を表示します。" ); |
16 | System.out.println( "OSは「" + this .os + "」です。" ); |
17 | System.out.println( "メモリサイズは「" + this .memory + "MByte」です。" ); |
21 | public String getOs() { |
26 | public int getMemory() { |
31 | public void setOsMemory(String os, int memory) { |
34 | System.out.println( "OSを「" + os + "」に、メモリサイズを「" + memory + "MByte」に変更しました。" ); |
38 | public class ThisKeyWord { |
40 | public static void main(String[] args) { |
42 | Computer9 com = new Computer9(); |
49 | System.out.println( "パソコンのOSは「" + com.getOs() + "」です。" ); |
50 | System.out.println( "メモリサイズは「" + com.getMemory() + "MByte」です。" ); |
53 | com.setOsMemory( "Windows2000" , 512 ); |
実行結果
※2.3.6のサンプルと同じ結果になります。
解説
今回のポイントはクラス内でのメンバアクセス方法です。フィールド変数とメソッドの前に「this.」と付いている点に注目して下さい。ソースコードを抜粋すると以下の部分が該当します。
thisキーワードは「オブジェクト自身」を表すので、結果「オブジェクト自身のshowメソッド」、「オブジェクト自身のフィールド変数os」という意味になります。
もう1つ重要なポイントがあります。それは31~35行目の「setOsMemoryメソッド」の引数名です。
フィールド変数と同じ名前の引数を設定しています。thisを付けるとオブジェクト自身のフィールド変数osと引数の変数osと区別できるようになり、同じ名前の変数があってもメソッド内で使用可能になります。
別に無理に同じ名前を利用しなければ「this」を使用しなくてもいいのですが、引数をフィールド変数と同じ名前にすることで、引数の意味が分かりやすくなります。
ポイント
- thisキーワードを利用することで、オブジェクト自身のメンバと明確に表すことができる。
NEXT>> 2.6 本章のまとめ