2011-01-26 12 views
0

静的でない静的メソッド内で静的変数を使用できるかどうかを知りたいですか?Javaで静的を使用する

私は静的Methodeの内部で非静的変数を使用できますか?

おかげ

+0

http://stackoverflow.com/questions/2079830/how-do-i-create-a-static-local-variable-in-javaを参照してください。 – Feanor

+2

非静的メソッドと静的メソッドの違いは、「this」がゼロパラメータとして送信されたことだけです。だから非静的メソッドは常に効果的に1つの余分なパラメータを持っています(これはJavaソースでは決して表示されませんが、 'this'を使うことができます)。静的には特別なパラメータはありません。サイドノート:内部クラスは、外側(または内側)クラスの参照を受け入れる* static *合成メソッドを使用して、外部クラス(およびその逆)のプライベートフィールドにアクセスします。 – bestsss

答えて

4

静的変数には、任意の場所からアクセスできます。 非静的変数は、非静的メソッドまたは特定のオブジェクト(クラスのインスタンス)からのみアクセスできます。このため

理由は非常に複雑な、しかし、簡単に取得することができます:オブジェクトは、そのクラスからインスタンス化されるたびに、あなたのクラスの非静的が複製されている

何かを。静的なものは、クラスのすべてのインスタンスに共通であり(新しいオブジェクトに対しては複製されません)、個々のオブジェクトの状態の変更による影響を受けません。

明らかに、クラスのインスタンスが作成されるまで、静的でないものは存在しません - それに属するオブジェクトはありません。静的メンバーはクラスのインスタンスを存在させる必要はないので、オブジェクトのインスタンスを必要とする(静的でない)メンバーにアクセスすることはできません。

+0

ありがとう、これは素敵な答え – VisaMasterCard

+0

問題ない、それを理解する最良の方法は、実際にそれについて再生し、それを見ることです。 – richzilla

1

私は非静的Methodeの内部の静的変数を使用することが可能であるかどうかを知りたいですか?

はい。

静的メソッド内で非静的変数を使用できますか?

+0

静的メソッド内で静的でない変数を使用できないのはなぜですか? – VisaMasterCard

+2

@ヴィサ:それは意味をなさないので。静的メソッドは特定のインスタンスに関連付けられていませんが、静的でない変数は関連付けられています。 –

+0

インスタンスでインスタンスを修飾することができます: 'someInstance.myInstanceVar'。暗黙的に、静的コンテキストでは意味を持たない 'this'を使用します。 –

0

私は非静的Methodeの内部の静的変数を使用することが可能であるかどうかを知りたいですか?

はい。

静的メソッド内で非静的変数を使用できますか?

静的メソッド内で使用できるクラスのインスタンスがある場合のみ。

1

静的コンテキストで非静的変数を使用することについて、どういうことを考えてください。静的メソッドはどのインスタンスでも実行されていないため、クラスに定義されているメンバーフィールドで操作することはどういう意味ですか?そのフィールドはどのインスタンスに属していますか?なし!

逆のシナリオは、非静的コンテキストで静的変数を使用することは完全に意味があります。インスタンス上にあり、指定されたクラスのすべてのインスタンスに対して定義されている静的な参照を読み取る必要があります。

3

どちらも可能ですが、インスタンス(静的でない)変数にアクセスするにはインスタンスが必要です。
これは、インスタンスメソッドのように非静的コンテキストで暗黙的に指定することができ、静的コンテキストで明示的に指定する必要があります。

class StaticOrNot { 

    static int staticVar = 1; 
    int instVar = 2; 

    static void staticMethod() { 
     staticVar += 1; 
     StaticOrNot someInstance = new StaticOrNot(); 
     someInstance.instVar += 2; 
    } 

    void nonStatic() { 
     staticVar += 1; 
     instVar += 2; // using this as instance 
    } 
} 
+0

someInstanceはどういう意味ですか? – VisaMasterCard

+0

@ VisaMasterCard - 変数にアクセスしたいクラスのインスタンス(オブジェクト)です。例えばローカル変数。 –

関連する問題