Javaを学び始めるとき、「フィールド」と「引数」という言葉に出会います。そして、よく似た名前で混乱することもあるかもしれません。本記事では、フィールドと引数の違いを明確にし、this
キーワードの使い方についても解説します。これを読めば、Javaのクラス設計がスムーズになること間違いなし!
1. フィールドとは?
フィールドは、クラス内で定義される変数のことで、クラスが保持するデータ(オブジェクトの状態)を表します。
-
特徴
- クラス全体で利用可能。
- クラスのインスタンスが生成されている間、値が保持される。
- アクセス修飾子(
private
やpublic
)を指定して、アクセス範囲を制御できる。
例:フィールドの定義
public class BankAccount {
private String accountHolder; // フィールド
private double balance; // フィールド
}
上記のコードでは、accountHolder
(口座名義)とbalance
(残高)がフィールドとして定義されています。
2. 引数とは?
引数(パラメータ)は、メソッドやコンストラクタに値を渡すために使う一時的な変数です。メソッドやコンストラクタの中でのみ有効です。
-
特徴
- メソッドやコンストラクタに値を渡すために使われる。
- 一時的なスコープを持ち、メソッドやコンストラクタの処理が終わると消える。
例:引数の定義
public BankAccount(String accountHolder, double initialBalance) {
this.accountHolder = accountHolder;
this.balance = initialBalance;
}
ここでは、accountHolder
とinitialBalance
が引数です。オブジェクトを作るときに渡される値を一時的に受け取るための変数として機能します。
3. フィールドと引数の違い
項目 | フィールド | 引数 |
---|---|---|
定義場所 | クラス内 | メソッドやコンストラクタの括弧内 |
有効範囲 | クラス全体 | メソッドやコンストラクタ内 |
役割 | オブジェクトの状態を保持 | 一時的に値を受け渡す |
修飾子 |
private 、public などで制御可能 |
修飾子を持たない(ローカル変数扱い) |
4. フィールドと引数の名前が同じ場合
フィールドと引数の名前が同じ場合、this
キーワードを使って区別します。
例:this
キーワードの使用
public class BankAccount {
private String accountHolder; // フィールド
private double balance; // フィールド
public BankAccount(String accountHolder, double balance) {
this.accountHolder = accountHolder; // フィールド = 引数
this.balance = balance; // フィールド = 引数
}
}
-
this.accountHolder
:クラスのフィールドを指します。 -
accountHolder
(this
なし):引数を指します。
5. 実際のコード例で理解する
以下は、フィールドと引数の役割がわかるコード例です。
コード例:銀行口座クラス
public class BankAccount {
private String accountHolder; // フィールド
private double balance; // フィールド
// コンストラクタ
public BankAccount(String accountHolder, double initialBalance) {
this.accountHolder = accountHolder;
this.balance = initialBalance;
}
// 残高を表示するメソッド
public void displayInfo() {
System.out.println("Account Holder: " + this.accountHolder);
System.out.println("Balance: " + this.balance);
}
}
// 実行クラス
public class Main {
public static void main(String[] args) {
// オブジェクトを生成し、引数を渡す
BankAccount account = new BankAccount("Alice", 1000.0);
// 情報を表示
account.displayInfo();
}
}
実行結果
Account Holder: Alice
Balance: 1000.0
6. まとめ
- フィールドは、オブジェクトが保持するデータで、クラス全体で利用可能。
- 引数は、メソッドやコンストラクタが一時的に受け取るデータ。
- 名前が同じ場合は、
this
キーワードを使ってフィールドと引数を区別する。
これらを理解することで、クラス設計がより明確になり、保守性の高いコードが書けるようになります。ぜひ実際にコードを書いて確認してみてください!