2011-07-21 20 views
1

スタティックJavaメソッド(ファクトリクラスメソッド)を呼び出すと、そのクラスのオブジェクトが作成されますか?Javaスタティックメソッドの呼び出し

私は、コードをチェックしましたが、そのクラスのオブジェクトを呼び出す前にインスタンス化したことがないことを見ることができませんでした

(配列は、クラスの変数である)の静的メソッドは、値がのは、配列のサイズを言わせて返す意味静的メソッド。 ?

public static boolean isFiveInstance() { 
    return _instances.size() == 5; 
} 

と_instances

private static ArrayList<LocalMediaPlayer> _instances; 

と建設業者に作成され、満たされている変数のクラスです。

答えて

3

いいえ、static呼び出しはインスタンス化されていません(インスタンス化されていないオブジェクトなので)。

静的メソッドの呼び出しを含めて初めてクラスを参照するときに、クラスがロードされます。クラスローダーによって。

静的初期化子の出番です:

static { 
    // do something 
} 

クラスが初期化されるたびに、このブロックはそう

+0

(一度クラスローダごと)と呼ばれていますか?私はクラスの静的メソッドを呼び出すときに Class.staticMEthod(); この静的ブロックも呼び出されます。 この静的ブロックはコンストラクタ内にあります。 –

+0

staicブロックは、初めてクラスを参照するときに呼び出されます。そしてそれはコンストラクタの外に置かれます。 – Bozho

+0

ok、私はポイントを得たと思います。まず、あなたはコンストラクタの外です(私の間違い)。そして、私は**クラス**を参照しているので、 'Class.StaticMethod(); 'のような静的メソッドを呼び出すと、静的ブロックも実行されます。たとえクラスインスタンスが作成されていないとしても。 –

4

いいえ。これが静的メソッドを作成する背後にあるポイントです。静的メソッドはどちらのクラスでも定義されているオブジェクトのインスタンス変数を使用しないので、静的メソッド内で参照するものはすべて静的でなければなりません。あなたがClass.StaticMethod()の代わりのような静的メソッドを呼び出す理由です

new Class().StaticMethod(); 

newは、このようにそのオブジェクトの新しいインスタンスを作成し、そのクラスをインスタンス化します。

2

いいえ、静的メソッドを呼び出すと、そのクラスのインスタンスは作成されません。そこでは静的メソッドとインスタンスメソッドが異なります。彼らは実行するためにインスタンス化するために属しているクラスのインスタンスを必要としません。

関連する問題