thisキーワードの説明ページです。
thisはフィールドやメソッドに付加することができる、自分自身のインスタンス(オブジェクト)を指し示すキーワードです。
もくじ [非表示]
thisの概要
thisは前述の通り、自分自身のインスタンス(オブジェクト)を指し示すものです。自クラスのメソッドやフィールドはthisが省略された形になっています。
また、thisはコンストラクタ内でも利用することができます。
様々なthisの記述と利用法
thisを変数名に付加する
ローカル変数とフィールドは同じ名前を利用できますが、メソッド内ではローカル変数が優先して利用されます。ローカル変数とフィールドを同名にした際、thisを付加することでフィールドとして明示することができます。
※thisはインスタンスを指すため、変数名に付加するとフィールドとなります。
フィールドにthisを追加 | this.フィールド名 |
---|---|
記述例 | void execute(int number){ 空白this.number = number ; } |
thisをメソッドと利用する
メソッドにthisを追加 | this.メソッド名(引数) |
---|---|
記述例 | this.execute() ; |
thisをコンストラクタ内で利用する
コンストラクタ内からオーバーロードされた他のコンストラクタを呼び出す際に利用できます。例えば、引数なしのコンストラクタ内で、引数ありのコンストラクタを呼び出したい場合が挙げられます。
但し、コンストラクタ内で他のコンストラクタを呼び出す場合は、必ず先頭に記述する必要があります。
コンストラクタをthisで呼び出し | this(引数) |
---|---|
記述例 | Test(){ 空白this(“ななし”,1) ; } Test(String s, int n){ 空白str = s; 空白number n; 空白System.out.println(“初期化しました”) ; } |
this サンプルプログラム
以下のプログラムを「ThisTest.java」「Number41.java」という名前でWorkフォルダ内に保存します。
保存が完了したら、コマンドプロンプトを起動し、Number41.javaをコンパイルしてみましょう。
実行例
C:\work>javac Number41.java
C:\work>java Number41
初期化しました。
名前はななし様です。
番号は1番です。
※実行例はコンパイルおよび実行時の例を表示しています。
補足 thisを利用する際の注意点
thisは自分自身のインスタンスを指し示すものなので、staticメソッド内では利用できません。
※static無しのメンバ(インスタンス変数やインスタンスメソッド)はstatic内では利用できません。
例えば、main()メソッドはstatic付きですので、main()メソッド内で以下のようにthisを利用するとコンパイルエラーとなります。
実行例
C:\work>javac Number41.java
Number41.java:11: エラー: staticでない変数 thisをstaticコンテキストから参照することはできません
System.out.println(this.a);
^
Number41.java:12: エラー: staticでない変数 thisをstaticコンテキストから参照することはできません
System.out.println(this.b);
^
※bというフィールドはstaticで宣言されており、main()メソッド内で利用できますが、staticを付けてしまうとコンパイルエラーとなります。
this 復習問題
正解の選択肢をクリックすると、次の問題が表示されます。
- 問題thisの説明として正しいものを選んでください。
- 解答群
- thisを付加するとアクセス禁止となる
- thisを付加するとサブクラスを指し示す
- thisを付加しない場合はsuperが自動的に付加される
- thisは自分自身のオブジェクトを指し示す
まとめ
- thisは自分自身のインスタンス(オブジェクト)を指し示す
- フィールドやメソッドに付加でき、コンストラクタはthis()として利用できる
- 変数名にthisを付加するとフィールドとなる
- コンストラクタから他のコンストラクタを呼び出す際には「this(引数)」として利用できる
- 「this(引数)」はコンストラクタ内部の先頭にしか記述できない