静的変数とインスタンス変数の違い
1234 ワード
構文定義の違い:静的変数の前にstaticキーワードを追加し、インスタンス変数の前に追加しません.
プログラム実行時の違い:インスタンス変数はオブジェクトのプロパティに属し、このインスタンス変数を使用するには、インスタンスオブジェクトを作成する必要があります.静的変数はインスタンスオブジェクトではなくクラスに属するため、クラス変数とも呼ばれ、プログラムがクラスのバイトコードをロードすれば、インスタンスオブジェクトを作成する必要がなく、静的変数が空間を割り当てられ、静的変数が使用されます.要するに、インスタンス変数はオブジェクトを作成してから使用する必要があります.静的変数はクラス名で直接参照できます.
たとえば、次のプログラムでは、複数のインスタンスオブジェクトを作成しても、staticVar変数が1つしか割り当てられず、インスタンスオブジェクトを作成するたびに1が加算されます.ただし、インスタンスオブジェクトを作成するたびに、1つのinstanceVarが割り当てられます.すなわち、複数のinstanceVarが割り当てられ、各instanceVarの値は1回しか加算されません.
結果:
staticVar=1,instanceVar=1
staticVar=2,instanceVar=1
staticVar=3,instanceVar=1
staticVar=4,instanceVar=1
プログラム実行時の違い:インスタンス変数はオブジェクトのプロパティに属し、このインスタンス変数を使用するには、インスタンスオブジェクトを作成する必要があります.静的変数はインスタンスオブジェクトではなくクラスに属するため、クラス変数とも呼ばれ、プログラムがクラスのバイトコードをロードすれば、インスタンスオブジェクトを作成する必要がなく、静的変数が空間を割り当てられ、静的変数が使用されます.要するに、インスタンス変数はオブジェクトを作成してから使用する必要があります.静的変数はクラス名で直接参照できます.
たとえば、次のプログラムでは、複数のインスタンスオブジェクトを作成しても、staticVar変数が1つしか割り当てられず、インスタンスオブジェクトを作成するたびに1が加算されます.ただし、インスタンスオブジェクトを作成するたびに、1つのinstanceVarが割り当てられます.すなわち、複数のinstanceVarが割り当てられ、各instanceVarの値は1回しか加算されません.
public class VariantTest
{
public static int staticVar = 0;
public int instanceVar = 0;
public VariantTest()
{
staticVar++;
instanceVar++;
System.out.println("staticVar=" + staticVar + ",instanceVar=" + instanceVar);
}
public static void main(String[] args){
VariantTest a=new VariantTest();
VariantTest b=new VariantTest();
VariantTest c=new VariantTest();
VariantTest d=new VariantTest();
}
}
結果:
staticVar=1,instanceVar=1
staticVar=2,instanceVar=1
staticVar=3,instanceVar=1
staticVar=4,instanceVar=1