8

この質問のタイトルは実際には以前の試験問題であり、それに対する説明/回答を探しています。

私はJavaを学んでおり、その構文に慣れてきていることに注意してください。

この質問が以前に尋ねられた可能性があることを理解しています。可能であれば、誰かが質問にアクセスできる場所を教えてもらえますか? また、その場合はご容赦ください。私がこの分野を研究してきたことを示すために、私自身の理解では、インスタンス変数は特定のクラス (テンプレート) のオブジェクト/インスタンスに属し、必要に応じてそのインスタンス/オブジェクト内で変更 (変異) できるということです。

クラス変数とは、コピーが 1 つしかなく、アクセスはできるが変更 (変異?) できない変数ですが、必要に応じてすべてのクラスで使用できますか?

私はここで正しい軌道に乗っていますか?

また、「静的」は正確に何をしますか? クラスのインスタンスは、クラスのメイン インスタンス内に存在する場合にのみ静的ですか?

どうもありがとう。

4

3 に答える 3

20

静的変数はクラスのすべてのインスタンスで共有されますが、インスタンス変数はクラスの各インスタンスに固有です。

静的変数のメモリはコンパイル時に割り当てられ、ロード時にロードされ、クラスの初期化時に初期化されます。インスタンス変数の場合、上記のすべてが実行時に行われます。

役立つ例を次に示します。

インスタンス変数はオブジェクトごとに 1 つです。すべてのオブジェクトには、そのインスタンス変数の独自のコピーがあります。

public class Test{

   int x = 5;

 }

Test t1 = new Test();   
Test t2 = new Test();

t1 と t2 の両方が x の独自のコピーを持ちます。

静的変数はクラスごとに 1 つです。そのクラスのすべてのオブジェクトは同じ静的変数を共有します。

public class Test{

   public static int x = 5;

 }

Test t1 = new Test();   
Test t2 = new Test();

t1 と t2 の両方が同じ x を共有します。

于 2013-03-18T20:36:08.240 に答える
5

クラスの複数のインスタンスを作成できます。インスタンス変数を宣言すると、各インスタンスはその変数の固有のコピーを取得します。静的変数を宣言すると、すべてのインスタンスで同じ変数と値になります。

public class Foo
{
    public int instanceVariable;
    public static int staticVariable;
}

Foo instance1 = new Foo();
Foo instance2 = new Foo();
instance1.staticVariable = 1;
instance1.instanceVariable = 2;
instance2.instanceVariable = 3;

instance1.staticVariable == 1 // true
instance2.staticVariable == 1 // true

instance1.instanceVariable == 2 //true
instance2.instanceVariable == 3 //true
于 2013-03-18T20:35:48.717 に答える
1

静的変数は、それが定義されているクラスのすべてのインスタンス (または非インスタンス) 間で共有される値を格納します。名前によるインスタンス変数は、毎回その新しいコピーを作成します。新しいオブジェクトが作成されるとき。

于 2013-03-18T20:41:48.023 に答える