【6日でできるJava入門】クラスのフィールド


 Javaにおける「クラスのフィールド」は、クラスが持つ“データ”を表す変数です。クラスはフィールド(変数)、コンストラクタ(初期化処理)、メソッド(処理の手順)の3つで構成されています。
 フィールドは、そのクラスのインスタンスごとに個別に値を持つことができる「インスタンスフィールド」と、全インスタンスで共有される「クラスフィールド(staticフィールド)」があります。
また、値が変わらない「定数フィールド」も存在します。

1.クラスの構造とフィールドの種類

1.1. クラスの構造

クラスは次のような構造を持っています。

要素内容
フィールドクラスが管理するデータ。変数や定数int value;static int COUNT;
コンストラクタインスタンス生成時に呼ばれる初期化メソッドSample(int v) { ... }
メソッドクラスの操作手段。処理や動作を定義する関数int getValue() { ... }

1.2. フィールドの種類と特徴

フィールドの種類説明宣言例備考
インスタンスフィールドインスタンスごとに独立した値を持つprivate int number;オブジェクトごとに値が異なる。
クラスフィールド(static)クラス全体で共通の値を持つpublic static int count = 0;全インスタンスで共通
定数フィールド(final)変更不可の定数値public static final int SIZE = 10;値の書き換え不可(変更不可)

2.サンプルプログラムと解説

2.1. フィールドの使い方

 次の例では、Sampleクラスにインスタンスフィールド、クラスフィールド、定数フィールドを定義しています。

ファイル名: lesson17_1.java

public class Sample {
    // インスタンスフィールド
    private int number;

    // クラスフィールド(全インスタンス共通)
    public static int count = 0;

    // 定数フィールド
    public static final int SIZE = 100;

    // コンストラクタ
    public Sample(int n) {
        this.number = n;
        count++; // インスタンスが生成されるたびにカウントアップ
    }

    // インスタンスメソッド
    public int getNumber() {
        return number;
    }

    // クラスメソッド(staticメソッド)
    public static int getCount() {
        return count;
    }

    public static void main(String[] args) {
        Sample s1 = new Sample(10);
        Sample s2 = new Sample(20);

        System.out.println("s1のnumber: " + s1.getNumber()); // 10
        System.out.println("s2のnumber: " + s2.getNumber()); // 20
        System.out.println("インスタンスの総数: " + Sample.getCount()); // 2
        System.out.println("定数SIZE: " + Sample.SIZE); // 100
    }
}

実行結果

s1のnumber: 10
s2のnumber: 20
インスタンスの総数: 2
定数SIZE: 100

2.2. Java標準クラスの定数フィールド利用例

例えば、Integerクラスには最大値・最小値などの定数フィールドが用意されています。

ファイル名: lesson17_1.java

public class lesson17_1 {
    public static void main(String[] args) {
        System.out.println("intの最大値: " + Integer.MAX_VALUE);
        System.out.println("intの最小値: " + Integer.MIN_VALUE);
        System.out.println("intのビット数: " + Integer.SIZE);
    }
}

実行結果

intの最大値: 2147483647
intの最小値: -2147483648
intのビット数: 32

3.フィールドへのアクセスと可視性

3.1. アクセス修飾子の違い

修飾子アクセス範囲説明
publicどこからでもアクセス可外部からも見える
protected同じパッケージ/サブクラス内継承クラスからも見える
(なし)同じパッケージ内パッケージプライベート
private同じクラス内のみ完全に隠蔽される

フィールドはprivateで宣言し、getter/setterメソッドで操作するのが一般的です。

まとめ

  • フィールドはクラスが保持するデータ(変数・定数)。
  • インスタンスごと、クラス全体、定数値など目的に応じて使い分ける。
  • static finalで定数フィールド(値の変更不可)を表現できる。
  • 標準クラス(例:Integer.MAX_VALUE)にも多くの定数がある。