Java の静的変数と最終変数の違い
このチュートリアルでは、static
キーワードと final
キーワードの違いを示します。表形式と実際の例の違いについて説明しましょう。
static |
final |
---|---|
宣言中に静的変数を初期化する必要はありません。 | 宣言時に final 変数を初期化する必要があります。 |
静的変数は再初期化できます | 最終変数を再初期化することはできません。 |
ネストされた静的クラス、変数、メソッド、およびブロックで使用されます。 | これは、クラス、メソッド、および変数とともに使用されます。 |
静的メソッドは、他の静的メソッドからのみ呼び出すことができます。 | 最終メソッドをサブクラスでオーバーライドすることはできません。 |
Java の静的変数
静的変数またはメソッドを作成すると、オブジェクトではなくクラスにアタッチされます。変数またはメソッドは、プログラム全体で同じ参照を共有します。
次のプログラムには、静的変数 num
と dummyMethod()
と呼ばれる static
メソッドを含むクラス DummyClass
があります。別のクラスからこれら 2つのメンバーにアクセスするために、これらは静的であるため、DummyClass
のオブジェクトを作成することはできません。
クラス名を使用して直接呼び出します。
例:
public class ExampleClass3 {
public static void main(String[] args) {
DummyClass.num = 5;
System.out.println("Static variable value: " + DummyClass.num);
DummyClass.dummyMethod();
}
}
class DummyClass {
public static int num = 0;
public static void dummyMethod() {
System.out.println("Inside Static Dummy Method");
}
}
出力:
Static variable value: 5
Inside Static Dummy Method
外部クラスを参照せずに static
キーワードを使用してネストされたクラス。static
キーワードを使用して、クラス内に内部クラスを作成できます。
次の例では、クラス DummyClass
があり、その中に InnerClass
という静的クラスを作成し、このクラスでメソッド dummyMethod()
を作成します。
ここで、ExampleClass3
クラスで、DummyClass.InnerClass
を使用して InnerClass
を取得し、DummyClass
クラスのオブジェクトを作成して、dummyMethod()
関数を呼び出します。
例:
public class ExampleClass3 {
public static void main(String[] args) {
DummyClass.InnerClass dummyClassObj = new DummyClass.InnerClass();
dummyClassObj.dummyMethod();
}
}
class DummyClass {
static class InnerClass {
void dummyMethod() {
System.out.println("Inside Static Dummy Method Of The Inner Static Class");
}
}
}
出力:
Inside Static Dummy Method Of The Inner Static Class
Java の最終変数
最終変数は、初期化されると変更できません。この例は、final 変数を作成してから再初期化しようとすると、出力にエラーが発生することを示しています。
public class ExampleClass3 {
public static void main(String[] args) {
final int num = 0;
num = 1;
}
}
出力:
java: cannot assign a value to final variable num
別のクラスは final
クラスを拡張できません。クラスの作成中に final
キーワードを使用すると、そのクラスが他のクラスに継承されないように制限されます。
例:
public class ExampleClass3 {
public static void main(String[] args) {
new DummyClass().dummyMethod();
}
}
final class DummyClass {
public void dummyMethod() {
System.out.println("Inside Static Dummy Method");
}
}
class DummyClass2 extends DummyClass {
public void dummyMethod2() {
System.out.println("Inside Static Dummy Method 2");
}
}
出力:
java: cannot inherit from final com.tutorial.DummyClass
サブクラスの final
メソッドをオーバーライドすることはできません。最終クラスと同様に、関数が final
キーワードを使用する場合、そのサブクラスでオーバーライドすることはできません。
public class ExampleClass3 {
public static void main(String[] args) {
new DummyClass2().dummyMethod();
}
}
class DummyClass {
public final void dummyMethod() {
System.out.println("Inside Static Dummy Method");
}
}
class DummyClass2 extends DummyClass {
public void dummyMethod() {
System.out.println("Inside Overridden Dummy Method");
}
}
出力:
java: dummyMethod() in com.tutorial.DummyClass2 cannot override dummyMethod() in com.tutorial.DummyClass
overridden method is final
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn