1. 静的メソッドとの比較
通常の状況では、プロジェクトの開始時に一部のコードを実行する必要がある場合、この種のコードはプロジェクトの開始時にアクティブに実行される必要があります。オブジェクトを作成せずに、他のプログラムから呼び出す場合は、静的メソッドを使用する必要があります。静的メソッドは、クラスが読み込まれるときにすでに読み込まれており、クラス名を使用して直接呼び出すことができます。プログラムエントリーです。 2 つの違いは、静的コード ブロックは自動的に実行されるのに対し、静的メソッドは呼び出されたときに実行されることです。
2. 静的メソッドの注意事項
クラスの静的メソッドを使用する場合、次の点に注意してください。
a. 静的メソッドでは、同じクラスの他の静的メンバー (変数やメソッドを含む) のみを直接呼び出すことができます。の非静的メンバーに直接アクセスすることはできません。これは、非静的メソッドと変数は使用する前にクラスのインスタンス オブジェクトを作成する必要があるのに対し、静的メソッドは使用する前にオブジェクトを作成する必要がないためです。
b. 静的メソッドは、使用前にインスタンス オブジェクトを作成する必要がないため、いかなる方法でも this キーワードと super キーワードを参照できません。静的メソッドが呼び出されるとき、this によって参照されるオブジェクトはまったく生成されません。このキーワードはメソッド内でのみ使用でき、「メソッドを呼び出す
オブジェクト」への参照を表します。
静的変数とは、オブジェクトではなくクラス全体に属する変数です。メソッド本体内の変数は、たとえば次のように静的に宣言できないことに注意してください。 fun() { static int i=0;//不正です。 }
3. プログラム例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
1 2 3 4 5 6 7 8 |
|
4. ネット民提供
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
1 2 3 4 5 |
|
結論: 静的コード ブロックはクラスがロードされるときに自動的に実行され、非静的コード ブロックはオブジェクトの作成時に自動的に実行されるコードです。オブジェクトが作成されない場合、このクラスの非静的コード ブロックは実行されません。そして、実行順序は、静的コード ブロック ------非静的コード ブロック -コンストラクターです。
私を困惑させたのは、「パラメーターが 10 である親クラスのコンストラクター メソッドの a の値」です。次に、なぜその時点で 8 ではなかったのかを考えました (F11、ブレークポイントを直接設定して実行することはできません)。これは直接実行するのと同じです。違いはありません)、最初にパラメーターなしのコンストラクターに入り、最初のステートメントを実行して、別のコンストラクターに切り替えたことがわかりました (最初の文は、そうであるかどうかに関係なく実行する必要があります。この時点では、a はまだ 10 です) 、非静的コード ブロックはまだ実行されていません)、このステートメントがこの警告を表示するかどうかに関係なく、ソースが見つからないことを示します (プログラムは正常に実行を続けるためエラーではありません)。その後、非静的コード ブロックを実行します。静的コード ブロックを作成し、パラメーターを指定してコンストラクターから続行します 実行...
Java での静的静的コード ブロックの使用に関する詳細な説明については、PHP 中国語 Web サイトに注目してください。