StaticはJavaのもう1つの重要なキーワードです。プログラムの実行パフォーマンスを改善し、プログラムの構造を最適化できます。その主なアプリケーションは次のとおりです。
1.そのメンバーへのすべてのオブジェクトの共有を実現するために、クラス変数/静的変数と呼ばれる静的によって変更されたメンバー変数。
2。Classメソッド/Staticメソッドと呼ばれる静的によって変更されたメンバーメソッドは、オブジェクトを作成せずにクラス名を介して直接呼び出すことができます。
3。プログラムのパフォーマンスを最適化するための静的コードブロックをフォームします。
4.静的リードパッケージ。通常、クラスメソッドを現在のクラスに直接インポートするため、メソッド名を使用してクラスメソッドを直接呼び出すことができます。これはより便利です。
5。外部クラスをインスタンス化することなく、内部クラスを変更し、内部クラスを呼び出します。
次のコードの説明が添付されています。
パブリッククラスの学生{文字列名;静的int age; public string toString(){return "name:" + name + "、age:" + age; } public static void main(string [] args){desute s1 = new Student(); s1.name = "Zhang San"; S1.age = 20;学生S2 = new Student(); s2.name = "li si"; S2.age = 10; System.out.println(s1); System.out.println(s2); }}/**出力結果名:Zhang San、Age:10Name:Li Si、Age:10*/上記のように、2つのオブジェクトS1とS2は、メモリ内のヒープ領域のさまざまなアドレスに保存されるため、互いに干渉しません。ただし、静的キーワードはメンバー変数の年齢を変更し、クラスに属するクラスに属し、そのクラスのインスタンスのすべてのオブジェクトを共有および使用できます。したがって、出力年齢はすべて最終的に10に割り当てられます。静的を削除すると、明らかにオブジェクトは互いに影響を与えません。出力は次のとおりです。
名前:Zhang San、Age:20Name:Li Si、Age:10
上記のように、Out1が2を呼び出すとエラーが発生しました。このコードから、静的メソッドは非静的なメンバー変数とメンバーメソッドを呼び出すことができないことがわかります。非静的な方法では、静的メンバー変数とメンバーメソッドを呼び出すことができます。 Staticはメンバーのアクセス権に影響しないことに注意してください。 Javaのアクセス権に影響を与える可能性のあるキーワードは、プライベート、パブリック、保護、およびデフォルトです。
パブリッククラステストはbase {static {system.out.println( "static static block 1"); } public test(){system.out.println( "test constructor"); } public static void main(string [] args){new test(); }} class base {static {system.out.println( "static static block 2"); } public Base(){System.out.println( "Base Constructortor"); }}上記のように、2つの文を覚えておいてください。静的コードブロックには、クラスの読み込みがロードされています。静的によって変更された変数メソッドは、他の変数メソッドよりも最初に1回のみロードされます。サブクラスがロードされると、親クラスが最初にロードされます。これから分析できます。実行の開始時に、主な方法はプログラムの入り口であるため、最初にメイン方法を見つける必要がありますが、メインメソッドを実行する前に、最初にテストクラスをロードする必要があります。テストクラスをロードすると、テストクラスが基本クラスから継承されることがわかります。そのため、最初にベースクラスをロードするようになります。ベースクラスをロードすると、静的ブロックがあることがわかり、静的ブロックを実行します。ベースクラスがロードされた後、テストクラスはロードされ続け、テストクラスに静的ブロックがあることがわかり、静的ブロックが実行されます。必要なクラスを読み込んだ後、メインメソッドが実行され始めます。メインメソッドで新しいテスト()を実行すると、親クラスのコンストラクターが最初に呼び出され、次に独自のコンストラクターが呼び出されます。したがって、操作結果は次のとおりです。
静的静的ブロック2統計静的ブロック1ベースコンストラクターテストコンストラクター
/* a.java file*/package com.dogo.test; public class a {public static void outword(object o){system.out.println(o); }}/*b.javaファイル*/static com.dogo.test.a。*をインポートします。 } /** output*hello world! */}上記のように、A.Javaには単純な静的方法が含まれています。 B.Javaでは、静的キーワードを使用してクラスAをインポートします。したがって、「クラス名」を使用してクラスメソッドを呼び出す必要はありません。 「メソッド名」を直接使用して、クラス自身のメソッドと同様にクラスメソッドを呼び出すことができます。
/* outer.java*/public class outer {static {system.out.println( "outor static block"); } public outer(){system.out.println( "outourter constructor"); } staticクラス内側{static {system.out.println( "inner static block"); } public inner(){system.out.println( "inner constructor"); }}}/*test.java*/public class test {public static void main(string [] args){new outour.inner(); }}上記のように、staticで内側のクラスを変更することを忘れないでください。外側クラスは外側のクラスを読み込んでロードされるため、外側のクラスが外側のクラスをインスタンス化せずに静的内部クラスを直接呼び出すことができるため、外部クラスは内部クラスを直接呼び出すことができます。この例では、テストの主な方法を入力する前に、テストクラスをロードしてから、新しいoutour.inner()を実行します。ここに注意する:内側は静的であるため、外部クラスをロードして外部クラスをインスタンス化する必要はありません。内側は直接ロードしてインスタンス化できます。操作結果は次のとおりです。
内側の静的ブロック内側コンストラクター
Da Qiao注:Staticのもう1つの非常に重要なアプリケーションは、Singleton Design Patternを実装することです。単一関節パターンの特徴は、クラスに1つのインスタンスしか持てないことです。この関数を実現するには、クラスコンストラクターを非表示にする必要があります。つまり、コンストラクターはプライベートとして宣言され、オブジェクトを作成する方法を提供します。コンストラクターはプライベートとして宣言されるため、外の世界はこのタイプのオブジェクトを直接作成することはできず、クラスが提供する方法を介してクラスオブジェクトを取得することができます。したがって、オブジェクトを作成する方法は、静的としてのみ宣言できます。プログラムの例は次のとおりです。
クラスSingledemo {private static singledemo ins = null; private singledemo(){} public static singledemo getins(){if(ins == null){ins = new singledemo(); } return ins; }}