Javaとオブジェクト指向 this(4-17)

記事上広告

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を付加するとstaticと同様の扱いになる
this()という記述の説明として正しいものを選んでください。
解答群
this()はメソッドを指し示し、メソッド内部で記述できる
this()はコンストラクタを指し示し、コンストラクタ内部で記述できる
this()は引数ありのコンストラクタを呼び出す
this()はコンストラクタを指し示し、コンストラクタ内部であれば記述場所は問わない
お疲れ様でした。

まとめ

  • thisは自分自身のインスタンス(オブジェクト)を指し示す
  • フィールドやメソッドに付加でき、コンストラクタはthis()として利用できる
  • 変数名にthisを付加するとフィールドとなる
  • コンストラクタから他のコンストラクタを呼び出す際には「this(引数)」として利用できる
  • 「this(引数)」はコンストラクタ内部の先頭にしか記述できない
スポンサーリンク
レクタングル