出典: FreeCodeCamp staticキーワードは、変数、メソッド、静的ブロックなどの Java コードのさまざまな部分で使用できます。今日は、それが実際にどのように適用できるかを正確に見ていきます。 Java でstaticキーワードを使用する主な目的は、メモリを節約することです。他のクラスからアクセスされるクラス内に変数を作成する場合は、まずクラスのインスタンスを作成し、次に変数の各インスタンスに新しい値を割り当てる必要があります。これは、新しい変数の値がすべての新しいクラス/オブジェクトで同じになるようにするために必要です。ただし、静的変数を作成すると、その値は他のすべてのクラスで一定のままになり、変数を使用するためにインスタンスを作成する必要はありません。この方法では、変数を 1 回作成するので、メモリは 1 回だけ割り当てられます。この記事でいくつかの例を参照すると、これについてよりよく理解できるでしょう。
Javaで静的変数を作成する方法
変数を作成するときにstaticキーワードを使用する方法を理解するために、クラスの各インスタンスで共有される変数を作成する通常の方法を見てみましょう。class Student {
String studentName;
String course;
String school;
public static void main(String[] args) {
Student Student1 = new Student();
Student Student2 = new Student();
Student1.studentName = "Ihechikara";
Student1.course = "Data Visualization";
Student1.school = "freeCodeCamp";
Student2.studentName = "John";
Student2.course = "Data Analysis with Python";
Student2.school = "freeCodeCamp";
System.out.println(Student1.studentName + " " + Student1.course + " " + Student1.school + "\n");
// Ihechikara Data Visualization freeCodeCamp
System.out.println(Student2.studentName + " " + Student2.course + " " + Student2.school);
// John Data Analysis with Python freeCodeCamp
}
}
上記のコードで何が起こったのかを順を追って説明します。3 つの変数、studentName、course、schoolを持つStudentクラスを作成しました。次に、Studentクラスの 2 つのインスタンスを作成しました。
Student Student1 = new Student();
Student Student2 = new Student();
最初のインスタンスはStudent1で、クラス内に作成された変数にアクセスでき、次の値を持ちます。
Student1.studentName = "Ihechikara";
Student1.course = "Data Visualization";
Student1.school = "freeCodeCamp";
2 番目のインスタンスには次の意味がありました。
Student2.studentName = "John";
Student2.course = "Data Analysis with Python";
Student2.school = "freeCodeCamp";
よく見ると、両方の生徒の学校名が同じ「freeCodeCamp」であることがわかります。しかし、同じ学校に 100 人の生徒を作成しなければならない場合はどうなるでしょうか? これは、変数を同じ値で 100 回初期化し、毎回新しいメモリを割り当てることを意味します。これは一部の人にとっては問題にならないかもしれませんが、大規模なコードベースではプログラムの速度が大幅に低下する可能性があります。この問題を解決するには、 static キーワードを使用してschool変数を作成します。これ以降、クラスのすべてのインスタンスがこの変数を使用できるようになります。このようなもの:
class Student {
String studentName;
String course;
static String school;
public static void main(String[] args) {
Student Student1 = new Student();
Student Student2 = new Student();
Student1.studentName = "Ihechikara";
Student1.course = "Data Visualization";
Student1.school = "freeCodeCamp";
Student2.studentName = "John";
Student2.course = "Data Analysis with Python";
System.out.println(Student1.studentName + " " + Student1.course + " " + Student1.school + "\n");
// Ihechikara Data Visualization freeCodeCamp
System.out.println(Student2.studentName + " " + Student2.course + " " + Student2.school);
// John Data Analysis with Python freeCodeCamp
}
}
このコードでは、 school という静的変数を作成しました。static キーワードがデータ型と変数名の前にあることに注意してください。static String school = "freeCodeCamp"; 。これで、クラスの新しいインスタンスを作成するときに、インスタンスごとにスクール変数を初期化する必要がなくなりました。このコードでは、最初のインスタンスでのみ変数に値を割り当て、その後、その値が次のインスタンスに継承されました。コード内の任意の場所で静的変数の値を変更すると、以前に宣言されたコードの他の部分の値がオーバーライドされることに注意してください。したがって、 staticキーワードは、プログラム内で定数を維持することが意図されている変数にのみ使用する必要があります。また、クラスをインスタンス化するときに再度宣言する必要がないように、変数を作成するときに変数に値を割り当てることもできます。static String school = "freeCodeCamp"; 。この方法を使用すると、次のようになります。
class Student {
String studentName;
String course;
static String school = "freeCodeCamp";
public static void main(String[] args) {
Student Student1 = new Student();
Student Student2 = new Student();
Student1.studentName = "Ihechikara";
Student1.course = "Data Visualization";
Student2.studentName = "John";
Student2.course = "Data Analysis with Python";
System.out.println(Student1.studentName + " " + Student1.course + " " + Student1.school + "\n");
// Ihechikara Data Visualization freeCodeCamp
System.out.println(Student2.studentName + " " + Student2.course + " " + Student2.school);
// John Data Analysis with Python freeCodeCamp
}
}
次に、静的ブロックを使用して静的変数を初期化する方法を説明します。
Javaで静的メソッドを作成する方法
例を見る前に、Java の静的メソッドについて知っておくべきことがいくつかあります。- 静的メソッドは静的変数にのみアクセスして変更できます。
- 静的メソッドは、クラスのインスタンスを作成せずに呼び出したり使用したりできます。
class EvenNumber {
static int evenNumber;
static void incrementBy2(){
evenNumber = evenNumber + 2;
System.out.println(evenNumber);
}
public static void main(String[] args) {
incrementBy2(); // 2
incrementBy2(); // 4
incrementBy2(); // 6
incrementBy2(); // 8
}
}
上記のコードでは、 EvenNumberというクラスに 整数 ( EvenNumber ) を作成しました。静的メソッドはincrementBy2()と呼ばれます。このメソッドは、整数evenNumberの値をインクリメントし、その値を出力します。クラスのインスタンスを作成しなくても、プログラムのメインメソッドでincrementBy2()メソッドを呼び出すことができました。メソッドを呼び出すたびに、evenNumber が2 ずつ増分されて出力されます。メソッドを呼び出すときに、ドット表記を使用してクラス名をメソッドに追加することもできます。EvenNumber.incrementBy2(); 。各静的メソッドは、クラスのインスタンスではなく、クラスに属します。
Javaで静的ブロックを作成する方法
Java の静的ブロックはコンストラクターに似ています。これらを使用して静的変数を初期化できます。これらはmainメソッドの前にコンパイラによって実行されます。class Block {
static int year;
static {
year = 2022;
System.out.println("This code block got executed first");
}
public static void main(String[] args) {
System.out.println("Hello World");
System.out.println(year);
}
}
上記のコードでは、静的整変数yearを作成しました。次に、それを静的ブロックで初期化しました。
static {
year = 2022;
System.out.println("This code block got executed first");
}
ご覧のとおり、静的ブロックは、static キーワードの後に中かっこを使用して作成できます。コードの静的ブロックでは、年変数を値 2022 で初期化しました。また、「このコード ブロックが最初に実行されました」というテキストも出力しました。mainメソッドでは、「Hello World」と静的変数yearを出力しました。コンソールでは、コードは次の順序で実行されます。
このコード ブロックは Hello World 2022 で最初に実行されました。
これは、静的ブロック内のコードがmainメソッドの前にどのように実行されるかを明確に示しています。
GO TO FULL VERSION