Javaのフィールドとは?オブジェクトごとに値を持つ変数の考え方

本記事は、Schooの「Java入門 初級【2026年版】」第5回「クラスとオブジェクト」を学ぶ前後に、Javaのフィールドの考え方を整理したい方向けのステップアップ学習記事です。
ただし、Schooを受講していない方でも、クラスを学び始めた段階で読み進められる内容にしています。
Schoo コースページ:Java入門 初級【2026年版】
フィールドは、オブジェクトが持つ値を入れておくための変数です。クラスの中に String name; や int score; のように書くことで、Student オブジェクトが名前や点数を持てるようになります。
フィールドはオブジェクトの中に残る値
次の Student クラスでは、name と score がフィールドです。
ファイル名: FieldBasicExample.java
public class FieldBasicExample {
public static void main(String[] args) {
Student s1 = new Student("山田", 80);
System.out.println(s1.name + "さん:" + s1.score + "点");
}
}
class Student {
String name;
int score;
Student(String name, int score) {
this.name = name;
this.score = score;
}
}
String name; と int score; は、Student オブジェクトが持つ値の置き場所です。new Student("山田", 80) によってオブジェクトが作られると、そのオブジェクトの name には "山田"、score には 80 が入ります。
同じクラスから作ってもフィールドの値は別々
クラスは1つでも、new で作られたオブジェクトは別々です。そのため、同じ name、同じ score というフィールド名を使っていても、実際に入っている値はオブジェクトごとに分かれます。
Student s1 = new Student("山田", 80);
Student s2 = new Student("佐藤", 90);
s1.score = 75;
この例で s1.score を 75 に変更しても、s2.score は 90 のままです。s1 と s2 は、それぞれ自分のフィールドを持っているからです。
フィールドの値がオブジェクトごとに分かれる様子
次のツールでは、同じ Student クラスから作った s1 と s2 が、それぞれ別の name と score を持つ様子を確認できます。
選択中のプログラム
見るポイント:name と score はクラスに書いたフィールドですが、値は s1 と s2 のオブジェクトごとに分かれて入ります。
クラスに書くフィールド
class Student
new で作られたオブジェクトごとの値
s1 : Student
s2 : Student
フィールドとローカル変数の違い
フィールドと混同しやすいものに、メソッドやコンストラクタの中で作るローカル変数があります。
class Student {
String name; // フィールド
Student(String name) { // name は引数
this.name = name;
}
}
左側の this.name は、オブジェクトが持つフィールドを表します。右側の name は、コンストラクタに渡されてきた引数です。コンストラクタの中で this.name = name; と書くことで、渡されてきた値をフィールドに保存しています。
確認問題
class Studentの中にString name;と書いた場合、nameは何のための変数ですか。Student s1 = new Student("山田", 80);とStudent s2 = new Student("佐藤", 90);では、s1.scoreとs2.scoreは同じ値の置き場所ですか。this.name = name;の左側と右側のnameは、それぞれ何を表していますか。
演習後の確認:こちらのページを使って、自分で考えた内容を見直せます。
あわせて読みたい関連記事
まとめ
フィールドは、オブジェクトが持つ値を保存するための変数です。クラスにフィールドを書くことで、new されたオブジェクトごとに name や score の値を持てるようになります。まずは「フィールド名は同じでも、値はオブジェクトごとに分かれる」と考えると整理しやすくなります。