2011-01-15 4 views

答えて

2

JVMは、ANYクラスが正確に1回初期化されることを保証します。

正確な低レベルのメカニズムがこれを行うために使用するのは本当にJVM特有ですが、プログラマーとして知る必要があるのは、スレッドセーフなので、同じクラスへのアクセス/初期化を試みることです異なるスレッド。 (もちろん、それはちょうど、クラスローディングのために行く:すべての不変のデータにアクセスするという点で、それは静的または特定のインスタンスで、あなたが適切な対策を取る必要があること。)

1

スタティックネストされたクラスを持つことができ、他のクラスと同じように動作します。

私はあなたの静的コード/ブロック、クラスの初期化を参照していると仮定します。 JVMは、クラスが1つのスレッドだけによってロードされることを保証します。 JVMに組み込まれて以来、私はそれを使用しない言語はないと思います。

0

まずオフ、staticキーワードは、その一般的に、それは使用することができるが、クラスの宣言に使用されるが、それは、変数やメソッドの場合とは異なる何かを意味していません。

静的クラスについて本当に知りたいですか?それとも静的変数/メソッドについての質問ですか?

0

静的何が最初のスレッドがアクセスしようとしていないとき、クラスがロードされるときに初期化されます。ただし、クラスのstaticは、データメンバーまたは関数/メソッドのstaticと同じではありません。詳細については、this articleを参照してください。データメンバについて静的である場合、それらは "オブジェクト変数"ではなく "クラス変数"または "クラスメソッド"とみなされます(this article from Oracle for that discussion参照)。それは、インスタンスではなくクラスオブジェクト自体の一部にすることで実現します。任意のクラスには1つのクラスオブジェクトしか存在しません。他の言語についてのご質問に関して

:いいえ、静的言語に応じて、多くの異なるものを意味することができます。

+0

あなたがスレッドを使用せずにクラスをロードすることはできますか? –

+0

私はあなたの質問を完全に理解しているかどうかはわかりません。通常、クラスローディングはJVMによって処理されますが、 'Class.forName()'メソッドを使用して明示的にクラスをロードすることはできます。常にスレッドによってはロードが必要ですが、クラスをロードするために 'new Thread()'オブジェクトを明示的に宣言する必要はありません。 –

関連する問題