Javaのフィールドとは?書き方や使い方をわかりやすく解説

Javaを学び始めたばかりの人にとって、「フィールド」という言葉は少し難しく感じるかもしれません。
この記事では、フィールドとは何か、どんな場面で使うのか、どのように書けばよいのかを、プログラミング初心者でも理解できるように解説します。
読み終えるころには、Javaのフィールドの基礎から応用までしっかりと理解し、自信を持って使えるようになります。
フィールドとは何か?
Javaの「フィールド」とは、クラスの中で宣言される変数のことです。
クラスが持っている性質や情報を保存するために使われます。言い換えれば、オブジェクトが「どんな情報を持っているのか」を記録するための箱のようなものです。
たとえば、犬を表すDog
というクラスがあるとしましょう。この犬が「名前」と「年齢」という情報を持っている場合、それらはフィールドになります。
フィールドを使うことで、オブジェクトごとに異なる情報を管理することができます。
フィールドの基本的な書き方と使い方
まずは、簡単で分かりやすいサンプルコードを使って、フィールドの使い方を学んでみましょう。
public class Dog {
// これがフィールド(クラスの中で使う変数)です
String name;
int age;
// このメソッドは、犬が鳴く動作を表します
void bark() {
System.out.println(name + "がワンワンと鳴いています!");
}
}
public class Main {
public static void main(String[] args) {
// Dogクラスのインスタンス(オブジェクト)を作る
Dog myDog = new Dog();
// フィールドに値を代入する
myDog.name = "ポチ";
myDog.age = 3;
// フィールドの値を使って動作を実行する
myDog.bark();
System.out.println("年齢: " + myDog.age + "歳");
}
}
このコードでは、Dog
クラスがname
(名前)とage
(年齢)という2つのフィールドを持っており、それをbark()
メソッドの中で使っています。
Main
クラスでは、Dog
のインスタンスを作り、フィールドに値を代入して、その内容を使って動作を行っています。
フィールドの種類とアクセス修飾子
Javaでは、フィールドの使い方に関していくつかルールがあります。その中でも重要なのが「アクセス修飾子」です。
- アクセス修飾子とは?
- アクセス修飾子を使った具体例
アクセス修飾子とは?
アクセス修飾子とは、「そのフィールドを誰が使えるのか(見たり変更したりできるのか)」を決めるためのキーワードです。
これにより、情報を外部に見せたくないときや、安全に取り扱いたいときに役立ちます。
よく使われるアクセス修飾子
public
: どこからでも使える(アクセスできる)private
: 同じクラスの中からしか使えない(外部からは見えない)protected
: 同じパッケージ内やサブクラスから使える(やや上級者向け)
アクセス修飾子を使った具体例
public class Cat {
// このフィールドはprivateなので、外からは直接アクセスできません
private String name;
// 外部から値を設定するためのメソッド(セッター)
public void setName(String newName) {
name = newName;
}
// 外部から値を取得するためのメソッド(ゲッター)
public String getName() {
return name;
}
}
public class Main {
public static void main(String[] args) {
Cat myCat = new Cat();
myCat.setName("ミケ");
System.out.println("猫の名前は: " + myCat.getName());
}
}
このように、private
を使うとフィールドが外部から直接操作されることを防げます。そして、必要な場合はsetter
とgetter
メソッドを使って安全にアクセスできるようにします。
staticフィールドとインスタンスフィールドの違い
- インスタンスフィールドとは?
- staticフィールドとは?
インスタンスフィールドとは?
インスタンスフィールドは、オブジェクトごとに別々に値を持つフィールドです。たとえば、2匹の犬オブジェクトがあれば、それぞれ別の名前や年齢を持てます。
staticフィールドとは?
static(スタティック)フィールドは、クラス全体で共有されるフィールドです。すべてのインスタンスで同じ値を共有することになります。何匹の犬が作られたかを数える、といった場面でよく使われます。
public class Animal {
static int count = 0; // staticフィールド
public Animal() {
count++;
}
public static void showCount() {
System.out.println("作られた動物の数: " + count);
}
}
public class Main {
public static void main(String[] args) {
new Animal();
new Animal();
Animal.showCount(); // 出力: 2
}
}
このように、static
を使うと、オブジェクトをまたいで共通の情報を扱うことができます。情報をクラス全体で管理したいときに便利です。
フィールドとローカル変数の違い
フィールドとローカル変数はどちらも「変数」ですが、使われる場所やタイミングが異なります。
- フィールド
- ローカル変数
フィールド
- クラスの中にある変数
- オブジェクトの状態を保持
- インスタンスが生きている間ずっと使える
ローカル変数
- メソッドの中だけで使われる変数
- メソッドが終わると消える
- 外からアクセスできない
public class Example {
int number = 5; // フィールド
void showNumber() {
int temp = 10; // ローカル変数
System.out.println("フィールド: " + number);
System.out.println("ローカル変数: " + temp);
}
}
この例からも分かるように、フィールドはクラス全体で使われるのに対し、ローカル変数はメソッドの中だけで一時的に使われます。
演習問題
実際にコードを書いて、理解を深めましょう。
- 問題1:
Car
クラスにフィールドを追加して、車の情報を出力しよう - 問題2:
Student
クラスを作って、名前と点数を管理しよう - 問題3:
Library
クラスで登録された本の数をstatic
フィールドでカウントしよう
問題1:Car
クラスにフィールドを追加して、車の情報を出力しよう
Car
クラスを作って、model
(車種)とspeed
(速度)のフィールドを定義してください。そのあとで、インスタンスを作成し、model
に「プリウス」、speed
に100を設定し、値を出力してみましょう。
解答
public class Car {
String model;
int speed;
}
public class Main {
public static void main(String[] args) {
Car myCar = new Car();
myCar.model = "プリウス";
myCar.speed = 100;
System.out.println("車種: " + myCar.model);
System.out.println("速度: " + myCar.speed + "km/h");
}
}
問題2:Student
クラスを作って、名前と点数を管理しよう
Student
クラスに、name
(名前)とscore
(点数)のフィールドを定義し、名前が「タロウ」、点数が85のインスタンスを作成して表示してください。
解答
public class Student {
String name;
int score;
}
public class Main {
public static void main(String[] args) {
Student student = new Student();
student.name = "タロウ";
student.score = 85;
System.out.println(student.name + "さんの点数: " + student.score);
}
}
問題3:Library
クラスで登録された本の数をstatic
フィールドでカウントしよう
Library
クラスで、本の数をカウントするstatic
フィールドを使ってください。本を登録するたびに数を1つずつ増やし、最後に合計冊数を出力するようにしましょう。
解答
public class Library {
static int bookCount = 0;
public Library() {
bookCount++;
}
public static void showTotalBooks() {
System.out.println("登録された本の合計: " + bookCount);
}
}
public class Main {
public static void main(String[] args) {
new Library();
new Library();
new Library();
Library.showTotalBooks(); // 結果: 3
}
}
よくある質問(FAQ)
- フィールドと変数の違いは何ですか?
- なぜフィールドに
private
を使うの? - staticフィールドはいつ使うべき?
- フィールドはどこで定義すればいい?
- フィールドに初期値を入れるには?
フィールドと変数の違いは何ですか?
「変数」はプログラム全体で使う広い言葉で、その中に「フィールド」や「ローカル変数」などが含まれます。フィールドは「クラスの中にある変数」と覚えておくとよいでしょう。
なぜフィールドにprivate
を使うの?
データの安全性を保つためです。外部から勝手に変更されたくない情報は、private
にして守ります。そして、getter
やsetter
を使って正しい方法でアクセスさせます。
staticフィールドはいつ使うべき?
「オブジェクトごとに違う値」ではなく、「全体で共有したい値」があるときに使います。例として、作られたインスタンスの数や共通の設定値などがあります。
フィールドはどこで定義すればいい?
クラスの中で、メソッドの外に定義します。間違ってメソッドの中に書くと、それはローカル変数になってしまいます。
フィールドに初期値を入れるには?
宣言時に直接値を入れるか、コンストラクタの中で代入します。
int age = 0; // こうすれば初期値を持たせられる
まとめ
これで、Javaのフィールドについての基本から応用までをひと通り学ぶことができました。フィールドはJavaプログラミングにおいて非常に重要な考え方です。
使い方に慣れてくると、より複雑なクラス設計やオブジェクト指向の考え方が自然に身につくようになります。
この記事を参考に、ぜひ自分のプログラムにもフィールドを活用してみてください!