web-dev-qa-db-ja.com

Javaのインスタンスとクラス(静的)変数の違いは何ですか?

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

Javaを学習していて、その構文に慣れてきていることに注意してください。

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

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

私はここで正しい方向に進んでいますか?

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

どうもありがとう。

8
PrimalScientist

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

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

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

インスタンス変数はオブジェクトごとに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を共有します。

20
Ajay S

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

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
5
Robert Harvey

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

1
Pragnani