Java Staticキーワードの詳細

1918 ワード

通常、クラスを作成すると、そのクラスのオブジェクトの外観と動作が記述されます.newでそのクラスのオブジェクトを作成しない限り、実際にはオブジェクトは取得されません.newを実行してオブジェクトを作成すると、データストレージスペースが割り当てられ、外部から呼び出されます.
上記の方法では解決できない2つの覚醒がある.1つのケースは、特定のドメインに単一のストレージスペースを割り当てるだけで、どのくらいのオブジェクトを作成するかを考慮せず、オブジェクトを作成しない場合です.もう1つのケースでは、メソッドがクラスを含むオブジェクトに関連付けられないようにします.すなわち,オブジェクトを作成しなくても,このメソッドを呼び出すことができる.
staticというキーワードでこの2つのニーズを満たすことができます.物事がstaticであることを宣言すると、このドメインまたはメソッドは、そのクラスを含むオブジェクトインスタンスに関連付けられないことを意味します.したがって、クラスのオブジェクトが作成されていない場合でも、staticメソッドを呼び出したり、staticドメインにアクセスしたりすることができます.
staticキーワードを定義する前に置くだけで、フィールドまたはメソッドをstaticに設定できます.たとえば、次のコードはstaticフィールドを生成し、初期化します.
class StaticTest{
	static int i=47;
}

2つのStaticTestオブジェクトが作成されても、StaticTest.iストレージスペースも1つしかありません.この2つのオブジェクトは1つのiを共有します.
StaticTest st1=new StaticTest();
StaticTest st2=new StaticTest();

ここでst 1.iとst 2.iは同じ記憶領域を指すので、同じ値47を有する.
static変数を参照するには2つの方法があります.前例に示すように、st 2のようなオブジェクトによって位置決めすることができる.i;クラス名で直接参照することもできますが、これは静的でないメンバーではできません.
StaticTest.i++

クラス名を使用することは、変数のstatic構造を強調するだけでなく、コンパイラが最適化されていない場合によっては、static変数を参照する最初の方法です.
同様の論理は静的方法にも適用される.他の方法と同様に、静的方法を1つのオブジェクトで参照することも、特殊な構文形式ClassName.で参照することもできます.method()を参照します.静的メソッドを定義する方法と静的変数を定義する方法の詳細:
class Incrementable{
	static void increment(){StaticTest.i++;}
}

Incrementableのincrementメソッドを呼び出すには、典型的なオブジェクトを使用して呼び出すことができます.
Incrementable sf =new Incrementable();
sf.increment();

あるいは、incrementは静的メソッドであるため、そのクラスから直接呼び出すことができます.
Incrementable.increment();

staticがフィールドに作用すると、データの作成方法が変更されるに違いありません(staticフィールドはクラスごとに1つのストレージスペースしかありませんが、staticフィールドではなくオブジェクトごとに1つのストレージスペースがあるためです).staticがメソッドに作用すると、差はそれほど大きくありません.staticメソッドの重要な使い方の一つは、オブジェクトを作成せずに呼び出すことです.
他の任意の方法と同様に、staticメソッドは、そのタイプと同じ名前付きオブジェクトを作成または使用することができるため、staticメソッドは、同じタイプに属するインスタンス群の介護を担当することが多い.