Java 速習チュートリアル

Java のクラス属性

1. Javaクラス属性

前章の例では、クラス内で使用している変数 x に対して「変数」という言葉を使いました。
Javaにおいて、クラス内で宣言された変数は「属性(アトリビュート / Attributes)」と呼ばれます。
また、属性とは「クラスに属する変数」であると言うこともできます。

以下の例では、xy という2つの属性を持つ Main クラスを作成しています:

public class Main {
  int x = 5;
  int y = 3;
}

属性のもう一つの呼び名は「フィールド(Fields)」です。

2. 属性へのアクセス

属性にアクセスするには、そのクラスのオブジェクトを作成し、ドット構文(.を使用します。

以下の例では、Main クラスのオブジェクトを作成し、名前を myObj とします。その後、オブジェクトの属性 x を使用して、その値を出力します。

コード例:myObj というオブジェクトを作成し、x の値を出力します。

public class Main {
  int x = 5;

  public static void main(String[] args) {
    Main myObj = new Main();
    System.out.println(myObj.x);
  }
}

3. 属性の変更

属性の値は、後から変更することも可能です。

例:x の値を 40 に設定します。

public class Main {
  int x;

  public static void main(String[] args) {
    Main myObj = new Main();
    myObj.x = 40;
    System.out.println(myObj.x);
  }
}

また、既存の値を上書きすることもできます。

例:x の値を 25 に変更します。

public class Main {
  int x = 10;

  public static void main(String[] args) {
    Main myObj = new Main();
    myObj.x = 25; // xの値は25になりました
    System.out.println(myObj.x);
  }
}

もし、既存の値が上書きされるのを防ぎたい場合は、属性を final として宣言します。

例:

public class Main {
  final int x = 10;

  public static void main(String[] args) {
    Main myObj = new Main();
    myObj.x = 25; // エラーが発生します:final変数に値を代入することはできません
    System.out.println(myObj.x);
  }
}

final キーワードは、円周率(PI = 3.14159...)のように、変数に常に同じ値を保持させたい場合に非常に有用です。
なお、この final キーワードは「修飾子(Modifier)」と呼ばれます。これについては「Java修飾子」の章で詳しく学びます。

4. 複数のオブジェクト

一つのクラスから複数のオブジェクトを作成した場合、一方のオブジェクトの属性値を変更しても、もう一方のオブジェクトの属性値には影響を与えません。

例:myObj2x の値を 25 に変更し、myObj1x はそのままにします。

public class Main {
  int x = 5;

  public static void main(String[] args) {
    Main myObj1 = new Main();  // オブジェクト 1
    Main myObj2 = new Main();  // オブジェクト 2
    myObj2.x = 25;
    System.out.println(myObj1.x);  // 出力:5
    System.out.println(myObj2.x);  // 出力:25
  }
}

5. 複数の属性

属性は、必要に応じていくつでも指定することができます。

例:

public class Main {
  String fname = "John";
  String lname = "Doe";
  int age = 24;

  public static void main(String[] args) {
    Main myObj = new Main();
    System.out.println("名前: " + myObj.fname + " " + myObj.lname);
    System.out.println("年齢: " + myObj.age);
  }
}