2016-10-10 1 views
-1

私はそれがJavaで静的ブロックをどのように動かすのか疑問を抱いています。私が理解しているように、静的ブロック内のコードは、クラスがJVMによってロードされるたびに実行されます。私が理解していないのは、正確にクラスがロードされたときです。例についてはJAVAスタティックブロックが何回実行されたか?

は、のは、私はクラスMyObject内部の静的なブロックを持って、その後、別のクラスから、私はこのコードを持っていると仮定してみましょう:

MyObject o1= new MyObject(); 
MyObject o2= new MyObject(); 

静的ブロックが、この場合に実行される何回?

+0

問題は何ですか?クラスがロードされたとき、またはスタティックブロックが何回実行されたとき? – seal

+0

@seal - 両方の質問にお答えしました – Szanownego

+1

クラスは最初にロードする必要があります。 JVMがこれを行うときは、JVMの実装に依存します。 –

答えて

0

静的ブロック内のコードは、クラスが初めてJVMによってロードされたときに実行されます。

再度ロードすると、スタティックブロックは実行されません。 Class.forName( "class")メソッドを使用して静的ブロックを実行することによって、クラスを明示的にロードできます。あなたのケースで

MyObject o1= new MyObject(); 
MyObject o2= new MyObject(); 

あなたが最初のオブジェクトを作成すると、あなたの静的なブロックが実行されます。もう一度別のオブジェクトを作成しても実行されません。それらは同じデータのコピーを共有します。

+1

* "初めてクラスがJVMによって初めてロードされる" * - 何回ですか? :-) –

+0

初めてです。 – Pirate

+0

「*毎回*クラスはJVMによって初めて読み込まれます*」とは何ですか?クラスはどのくらいの頻度で「*初めて」ロードできますか?そして、あなたが "*もう一度ロードするならば"とはどういう意味ですか?どのようにクラスを読み込むことができますか? – Holger

関連する問題