Java this キーワード完全マスター:目的、用法、実践例
Java における this キーワードとは?
this キーワードは、現在のオブジェクトインスタンスを参照する参照変数です。最も一般的な用途は、同じ名前を持つインスタンス変数とパラメータ(またはローカル変数)を区別することです。
this の主な用途:
- 現在のクラスのインスタンス変数を参照する
- 同じクラス内の別のコンストラクタを呼び出す(コンストラクタチェーン)
- 現在のオブジェクトをメソッドやコンストラクタの引数として渡す
- メソッドから現在のインスタンスを返す
なぜ this が不可欠なのか
メソッドのパラメータがインスタンス変数をシャドーイング(隠蔽)するクラスを考えてみましょう:
class Account {
int a;
int b;
public void setData(int a, int b) {
a = a;
b = b;
}
public void showData() {
System.out.println("Value of A =" + a);
System.out.println("Value of B =" + b);
}
public static void main(String[] args) {
Account obj = new Account();
obj.setData(2, 3);
obj.showData();
}
}
このコードを実行すると、A と B の両方が 0 と表示されます。代入がローカルパラメータに対して行われ、インスタンスフィールドには影響しないためです。これを解決するには、インスタンスフィールドに this を付けます:
public void setData(int a, int b) {
this.a = a;
this.b = b;
}
これで正しく出力されます:
Value of A = 2 Value of B = 3
コンパイラが this をどう扱うか
オブジェクトのメソッドを呼び出すとき(例:obj.setData())、コンパイラは内部的にインスタンス変数を this が付いたものとして扱います。したがって、各オブジェクトは独自のフィールドコピーを保持し、メソッドを呼び出したオブジェクトに基づいて正しいインスタンスが更新されます。
実践例
- クラス定義:
Account - インスタンス変数:
aとb - メソッド
setData:thisを使ってaとbに値を代入 - メソッド
showData:aとbの現在値を表示 - main メソッド:
Accountオブジェクトを作成し、データを設定して表示
修正済みコードをコンパイルして実行すると、出力は以下のようになります:
Value of A = 2 Value of B = 3
this のまとめ
- 現在のオブジェクトインスタンスを参照する
- 命名競合があるときにインスタンス変数を参照するために使用
this()でコンストラクタチェーンが可能- 他のメソッドやコンストラクタに引数として渡せる
- メソッドから現在のインスタンスを返せる
this を適切に使用することで、コードの明確性が向上し、エラーが減り、オブジェクト指向の原則への深い理解を示せます。
Java
- C#インターフェース完全解説:定義、実装例、実践的活用法
- C# Queue完全ガイド:Enqueue、Dequeue、FIFO操作の実例解説
- C言語free()関数完全マスター:実践ガイドと例
- Javaのthisキーワード徹底解説:実践的な用法とコンストラクタ活用
- Java Hello World:最初のJavaプログラム作成ステップバイステップガイド
- Java String.length()メソッド:文字列サイズ取得の実例解説
- Java String.charAt()完全解説:構文、戻り値、例外、実例
- Java String.compareTo()マスター:構文、ユースケース、実践例
- Java String.endsWith()マスター:文字列サフィックスチェック実例付き
- Java BufferedReader でファイル読み込み:実践ガイドと例
- Javaで挿入ソート:わかりやすい例とステップバイステップガイド