Java のクラスフィールドとインスタンスフィールド

Shikha Chaudhary 2023年10月12日
  1. Java のローカル変数
  2. Java の入力パラメータ
  3. Java のクラスフィールド
  4. Java のクラスフィールドのプロパティ
  5. Java のインスタンスフィールド
  6. Java のインスタンスフィールドのプロパティ
Java のクラスフィールドとインスタンスフィールド

この記事では、Java のローカル変数、入力パラメーター、クラスフィールド、インスタンスフィールドなどの Java プログラミング言語の基本的な用語について学習します。

Java のローカル変数

スコープがブロック、メソッド、またはコンストラクターにバインドされている変数は、ローカル変数と呼ばれます。たとえば、testingという方法があります。

val 変数を宣言し、このメソッドに 10 を割り当てます。main ブロック内に print ステートメントを記述します。

public class Experiment {
  public static void testing() {
    int val = 10;
  }

  public static void main(String[] args) {
    // try printing the local variable of the function demo
    System.out.printf("%d", val);
  }
}

出力:

error: cannot find symbol
      System.out.printf("%d", val);
                              ^
  symbol:   variable val
  location: class Experiment
1 error

このコードには変数 val が含まれていますが、エラーが発生します。ここで、変数 valtesting() メソッドのローカル変数です。

メソッド testing 内で定義されているため、その範囲は制限されています。print ステートメントがこのスコープ外でこの変数にアクセスしようとすると、エラーが発生します。

次に、メソッド testing 内で print ステートメントを宣言し、main ブロックからメソッドを呼び出します。

public class Experiment {
  public static void testing() {
    int val = 10;
    System.out.printf("%d", val);
  }

  public static void main(String[] args) {
    // call the method
    testing();
  }
}

出力:

10

今回は、print ステートメントがスコープ内から変数にアクセスしています。

次に、このコードでローカル変数を理解してみてください。

public class Treat {
  public static void main(String[] args) {
    for (int i = 0, i < 1; i++) {
      System.out.println("You will get a Cake if you answer correctly!");
    }
  }
}

変数 i はローカル変数です。その範囲は for ループに制限されています。

ローカル変数については、次の点に注意してください。

  • ローカル変数を宣言するために、publicprotectedprivate などのアクセス修飾子を使用することはできません。
  • これらの変数は、スタックレベルで内部的に実装されます。

Java の入力パラメータ

一部の情報は実行する必要がありますが、他の情報は実行しない場合があります。この方法を見てくださいようこそ

public class Greet {
  // a function that does not need any parameter or information
  public static void welcome() {
    System.out.println("Hello, we are happy you visited.");
  }
  public static void main(String[] args) {
    // call the function
    welcome();
  }
}

出力:

Hello, we are happy you visited.

値を渡さずにメソッドを呼び出します。このメソッドには情報を提供せず、正しく実行されます。

public class Test {
  // a function that needs some information/parameter
  public static void hello(int x) {
    int a;
    System.out.println("Hello, we are happy you visited.");
    if (x < 18) {
      a = 18 - x;
      System.out.printf("Please come back after %d years.", a);
    }
  }
  public static void main(String[] args) {
    int age = 2;

    // call the function
    hello(age);
  }
}

出力:

Hello, we are happy you visited.
Please come back after 16 years.

age の値を渡さないと、メソッド hello は正しく実行されません。

このメソッドは、括弧内に定義された変数 x を介してこの値を受け取ります。変数 x は、入力パラメーター、または単にパラメーターに他なりません。

入力パラメーターまたは Java のパラメーターは、メソッドの実行を支援するメソッドを定義するために使用される変数です。

パラメータと引数を混在させないでください。それらは同じ値を持っていますが、同じものではありません。

public class Test {
  // function to add ages
  public static int totalAge(int age1, int age2) {
    return age1 + age2;
  }
  public static void main(String[] args) {
    int a1 = 10;
    int a2 = 12;

    int total = totalAge(a1, a2);
    System.out.println("Sum of ages: " + total);
  }
}

出力:

Sum of ages: 22

ここで、age1age2 は入力パラメータです。

Java のクラスフィールド

クラス内の変数は、Java ではfieldと呼ばれます。pricequantityname などのすべての変数はフィールドです。

ただし、変数 quantitystatic キーワードで始まることに注意してください。定義にキーワード static が含まれるこのようなフィールドは、Java ではクラスフィールドと呼ばれます。

クラスフィールドは、Java ではクラス変数または静的フィールドとも呼ばれます。

class Cake {
  int price;
  static int quantity;
  string name;
}

Java のクラスフィールドのプロパティ

次のポイントはクラスフィールドです。

  • クラスフィールドは、static キーワードで宣言する必要があります。
public static NameOfClass {
  static datatype name_of_variable;
}
  • クラスの多くのインスタンスはクラスフィールドを共有するため、クラスフィールドはメモリ効率が高くなります。非常に簡単に言えば、インスタンスフィールドの値は、Java のクラスのすべてのインスタンスで同じです。
  • クラスのインスタンスとクラス名自体を使用して、Java のクラスフィールドにアクセスできます。静的フィールドにアクセスするためにインスタンスは必ずしも必要ではないことに注意してください。
class Cake {
  int price;
  static int quantity = 10;
  String name;

  public static void main(String[] args) {
    // create the object of Cake class
    Cake c1 = new Cake();

    // Access the class field using the object
    System.out.println(c1.quantity);

    // Access the class field using the class
    System.out.println(Cake.quantity);
  }
}

出力:

10
10

上記の例では、次のような dot 演算子を使用してオブジェクトを使用してクラスフィールドにアクセスします-c1.quantity。同様に、クラスごとに変数にアクセスするには、クラス名 Cake.quantity を使用します。

Java のインスタンスフィールド

public class Cake {
  int cost;
  String flavor;

  public Cake(int cost, String flavor) {
    this.cost = cost;
    this.flavor = flavor;
  }

  public int expense() {
    return cost;
  }

  public static void main(String[] args) {
    Cake cake1 = new Cake(1000, "Choco lava");
    Cake cake2 = new Cake(2000, "Pineapple");

    System.out.println(cake1.expense());
    System.out.println(cake2.expense());
  }
}

出力:

1000
2000

クラス Cake 内には、costflavor の 2つの変数があります。cake1cake2 を作成します。

オブジェクトごとに異なる値をとることができるこれらの変数は、インスタンス変数またはインスタンスフィールドと呼ばれます。

Java のインスタンスフィールドのプロパティ

Java のインスタンスフィールドは、非静的変数とも呼ばれます。インスタンスフィールドに関するいくつかのポイントがあります。

  • インスタンスフィールドは、Java の static キーワードで宣言されていません
public class ClassName {
  datatype variable_name;
}
  • すべてのインスタンスで共有されているわけではありません。各インスタンスは、Java のインスタンスフィールドに固有の値を持つことができます。
  • クラス自体を使用してクラスフィールドにアクセスする方法を確認しました。これは、Java のインスタンスフィールドには当てはまりません。Java のインスタンスフィールドにアクセスするには、インスタンス/オブジェクトが必要です。
  • Java のインスタンスフィールドで任意のアクセス指定子を使用できます。Java のフィールドの詳細については、このドキュメントを参照してください。