工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

Javaのthisキーワード徹底解説:実践的な用法とコンストラクタ活用

Java thisキーワード完全ガイド

この記事では、Javaのthisキーワードの目的、よくあるシナリオ、ベストプラクティスを明確な実例とともに解説します。

thisとは?

Javaにおいて、thisキーワードはクラスの現在のインスタンスを参照します。インスタンスメソッドやコンストラクタ内で、同じ名前を持つインスタンス変数とパラメータを区別するために最もよく使用されます。

class Main { int instVar; Main(int instVar){ this.instVar = instVar; System.out.println("this reference = " + this); } public static void main(String[] args) { Main obj = new Main(8); System.out.println("object reference = " + obj); } }

出力:

this reference = Main@23fc625e object reference = Main@23fc625e

thisと変数objの両方が同じオブジェクトインスタンスを指しており、thisが単に現在のオブジェクトへの参照であることを確認できます。


thisを使用する場面

このキーワードはいくつかの一般的なコーディングパターンで非常に役立ちます:

変数名の曖昧さを解消

Javaではパラメータとインスタンス変数が同じ名前を持つことを許可しますが、thisなしではコンパイラがどちらを意図しているか判断できません。例えば:

class MyClass { int age; MyClass(int age){ age = age; } }

上記のコンストラクタでは、age = ageはパラメータを自身に代入するだけで、インスタンス変数は変更されません。thisを使うと代入が明確になります:

class Main { int age; Main(int age){ this.age = age; } public static void main(String[] args) { Main obj = new Main(8); System.out.println("obj.age = " + obj.age); } }

出力:

obj.age = 8

パラメータ名がインスタンス変数と異なる場合、コンパイラは暗黙的にthisを使用します:

class Main { int age; Main(int i) { age = i; } }

これはthis.age = iと同等です。

ゲッターとセッターでのthisの使用

セッターとゲッターでは、フィールドと同じ名前のパラメータを受け取ることがよくあります。thisにより正しい変数が対象になります:

class Main { String name; // setter void setName(String name) { this.name = name; } // getter String getName(){ return this.name; } public static void main(String[] args) { Main obj = new Main(); obj.setName("Toshiba"); System.out.println("obj.name: " + obj.getName()); } }

出力:

obj.name: Toshiba

this()によるコンストラクタのオーバーロード

あるコンストラクタが別のコンストラクタに処理を委譲する場合、this()で明示的なコンストラクタ呼び出しを行います:

class Complex { private int a, b; private Complex(int i, int j){ this.a = i; this.b = j; } private Complex(int i){ this(i, i); // 2引数コンストラクタを呼び出し } private Complex(){ this(0); // 1引数コンストラクタを呼び出し } @Override public String toString(){ return this.a + " + " + this.b + "i"; } public static void main(String[] args) { Complex c1 = new Complex(2, 3); Complex c2 = new Complex(3); Complex c3 = new Complex(); System.out.println(c1); System.out.println(c2); System.out.println(c3); } }

出力:

2 + 3i 3 + 3i 0 + 0i

重要なポイント:

注意: this()による明示的なコンストラクタ呼び出しは、コンストラクタの最初の文でなければなりません。

thisを引数として渡す

thisは現在のオブジェクトへの参照であるため、他のメソッドに渡すことができ、それらのメソッドがオブジェクトの状態を変更できます:

class ThisExample { int x; int y; ThisExample(int x, int y) { this.x = x; this.y = y; System.out.println("addTwo()メソッドにthisを渡す前:"); System.out.println("x = " + this.x + ", y = " + this.y); add(this); // 現在のインスタンスを渡す System.out.println("addTwo()メソッドにthisを渡した後:"); System.out.println("x = " + this.x + ", y = " + this.y); } void add(ThisExample o){ o.x += 2; o.y += 2; } } class Main { public static void main(String[] args) { new ThisExample(1, -2); } }

出力:

Before passing this to addTwo() method: x = 1, y = -2 After passing this to addTwo() method: x = 3, y = 0

ここでは、addメソッドが同じオブジェクトインスタンスを受け取り、そのフィールドを直接更新しています。

Java

  1. C# this キーワードをマスターする
  2. Java演算子をマスター:種類、構文、実践例
  3. Javaコメント:種類、使い方、ベストプラクティス
  4. Java拡張forループをマスター:構文、例、ベストプラクティス
  5. Javaコンストラクタをマスター:種類、使い方、実践例
  6. Java文字列をマスター:生成、メソッド、ベストプラクティス
  7. Javaのthisキーワード徹底解説:実践的な用法とコンストラクタ活用
  8. Javaのfinalキーワード完全解説:変数、メソッド、クラスでの活用法
  9. Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
  10. Javaカプセル化マスター:データ隠蔽の実践ガイド
  11. Java無名インナークラス完全ガイド:定義、構文、実践例