Java のクラスフィールドとインスタンスフィールド
- Java のローカル変数
- Java の入力パラメータ
- Java のクラスフィールド
- Java のクラスフィールドのプロパティ
- 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
が含まれていますが、エラーが発生します。ここで、変数 val
は testing()
メソッドのローカル変数です。
メソッド 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
ループに制限されています。
ローカル変数については、次の点に注意してください。
- ローカル変数を宣言するために、
public
、protected
、private
などのアクセス修飾子を使用することはできません。 - これらの変数は、スタックレベルで内部的に実装されます。
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
ここで、age1
と age2
は入力パラメータです。
Java のクラスフィールド
クラス内の変数は、Java ではfield
と呼ばれます。price
、quantity
、name
などのすべての変数はフィールドです。
ただし、変数 quantity
は static
キーワードで始まることに注意してください。定義にキーワード 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
内には、cost
と flavor
の 2つの変数があります。cake1
と cake2
を作成します。
オブジェクトごとに異なる値をとることができるこれらの変数は、インスタンス変数
またはインスタンスフィールド
と呼ばれます。
Java のインスタンスフィールド
のプロパティ
Java のインスタンスフィールドは、非静的変数とも呼ばれます。インスタンスフィールドに関するいくつかのポイントがあります。
- インスタンスフィールドは、Java の
static
キーワードで宣言されていません
。
public class ClassName {
datatype variable_name;
}
- すべてのインスタンスで共有されているわけではありません。各インスタンスは、Java のインスタンスフィールドに固有の値を持つことができます。
- クラス自体を使用してクラスフィールドにアクセスする方法を確認しました。これは、Java のインスタンスフィールドには当てはまりません。Java のインスタンスフィールドにアクセスするには、
インスタンス/オブジェクト
が必要です。 - Java のインスタンスフィールドで任意のアクセス指定子を使用できます。Java のフィールドの詳細については、このドキュメントを参照してください。