ホームページ  >  記事  >  Java  >  Java で static と Final を一緒に使用すると、どのような効果が得られますか?

Java で static と Final を一緒に使用すると、どのような効果が得られますか?

伊谢尔伦
伊谢尔伦オリジナル
2017-04-29 13:45:173379ブラウズ

静的finalはメンバー変数とメンバーメソッドを変更するために使用され、単純に「グローバル定数」として理解できます。

変数の場合は、一度値が与えられると変更できず、クラス名を通じてアクセスできることを意味します。

メソッドの場合は、オーバーライドできず、クラス名を通じて直接アクセスできることを意味します。

場合によっては、そのクラスのオブジェクトから完全に独立して使用できるように、クラス メンバーを定義したいことがあります。通常、クラス メンバーにはそのクラスのオブジェクトを通じてアクセスする必要がありますが、特定のインスタンスを参照せずに単独で使用できるメンバーを作成することもできます。このようなメンバーは、メンバーの宣言の前にキーワード static (static) を追加することで作成できます。メンバーが静的として宣言されている場合は、そのクラスのオブジェクトが作成される前に、オブジェクトを参照することなくアクセスできます。メソッドと変数の両方を静的として宣言できます。静的メンバーの最も一般的な例は main() です。 main() はプログラムの実行開始時に呼び出す必要があるため、静的として宣言されます。

static として宣言された変数は、本質的にはグローバル変数です。オブジェクトが宣言されるとき、静的変数のコピーは生成されませんが、クラスのすべてのインスタンス変数は同じ静的変数を共有します。静的として宣言されたメソッドには次の制限があります:

· 他の静的メソッドのみを呼び出すことができます。

· 静的データのみにアクセスできます。

· いかなる方法でも this または super を参照することはできません (キーワード super は継承に関連しており、次の章で説明します)。

計算によって静的変数を初期化する必要がある場合は、静的ブロックを宣言できます。静的ブロックは、クラスのロード時に 1 回だけ実行されます。次の例は、静的メソッド、いくつかの静的変数、および静的初期化ブロックを持つクラスを示しています。

class UseStatic {   
static int a = 3;   
static int b;   
 
static void meth(int x) {   
System.out.println("x = " + x);   
System.out.println("a = " + a);   
System.out.println("b = " + b);   
}   
 
static {   
System.out.println("Static block initialized.");   
b = a * 4;   
}   
 
public static void main(String args[]) {   
meth(42);   
}   
}

UseStatic クラスがロードされると、すべての静的ステートメントが実行されます。まず、a が 3 に設定され、次に静的ブロックが実行され (メッセージの出力)、最後に b が a*4 または 12 に初期化されます。次に main() を呼び出し、main() が meth() を呼び出し、値 42 を x に渡します。 3 つの println () ステートメントは、2 つの静的変数 a および b とローカル変数 x を参照します。

注: 静的メソッド内でインスタンス変数を参照することは違法です。

このプログラムの出力は次のとおりです:

Static block initialized.
x = 42
a = 3
b = 12

静的メソッドと変数は、それらが定義されているクラス外のオブジェクトから独立して使用できます。この方法では、クラス名の後にドット演算子を追加するだけです。たとえば、クラスの外から静的メソッドを呼び出したい場合は、次の一般的な形式を使用できます:

classname.method( )

ここで、classname は静的メソッドが含まれるクラスの名前です。定義されています。ご覧のとおり、この形式は、オブジェクト参照変数を介して非静的メソッドを呼び出す形式に似ています。静的変数には、クラス名の後にドット演算子を付けた同じ形式でアクセスできます。これは、Java がグローバル関数とグローバル変数の制御されたバージョンを実装する方法です。

これは一例です。 main() では、静的メソッド callme() と静的変数 b がクラスの外でアクセスされます。

class StaticDemo {   
static int a = 42;   
static int b = 99;   
static void callme() {   
 
System.out.println("a = " + a);   
}   
}   
 
class StaticByName {   
 
public static void main(String args[]) {   
StaticDemo.callme();   
System.out.println("b = " + StaticDemo.b);   
}   
}

以下はプログラムの出力です:

a = 42
b = 99

静的メンバーは、それが配置されているクラスによって作成されたインスタンスからはアクセスできません。

静的に変更されていないメンバーがオブジェクトメンバーの場合、各オブジェクトが所有します。

staticで変更されたメンバーはクラスメンバーであり、クラスから直接呼び出すことができ、すべてのオブジェクトに共通です。


以上がJava で static と Final を一緒に使用すると、どのような効果が得られますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。