javaクラスのメンバー変数には 2 つのタイプがあります。1 つはクラス変数または static 変数と呼ばれる、static キーワードによって変更される変数で、もう 1 つは変数です。静的な変更は行わず、インスタンス変数と呼ばれます。
構文定義の違い: static キーワードは静的変数の前に追加する必要がありますが、インスタンス変数の前には追加する必要はありません。
プログラム実行時の違い: インスタンス変数はオブジェクトの属性に属します。インスタンス変数に領域が割り当てられ、このインスタンス変数が使用できるようになる前に、インスタンス オブジェクトを作成する必要があります。静的変数はインスタンス オブジェクトではなくクラスに属しているため、クラス変数とも呼ばれます。プログラムがインスタンス オブジェクトを作成せずにクラスのバイトコードをロードする限り、静的変数にはスペースが割り当てられ、静的変数を使用できます。つまり、インスタンス変数は、このオブジェクトを通じて使用する前にオブジェクトを作成する必要がありますが、静的変数はクラス名を使用して直接参照できます。
たとえば、次のプログラムでは、インスタンス オブジェクトがいくつ作成されても、常に staticVar 変数が 1 つだけ割り当てられ、インスタンス オブジェクトが作成されるたびに、この staticVar が 1 ずつ増加しますが、インスタンス オブジェクトが作成されるたびに、1 つのインスタンス Var が割り当てられます。つまり、複数のインスタンス Var が割り当てられる可能性があり、各インスタンス Var の値は 1 回だけ増加します。
public class VariantTest { public static int staticVar = 0; public int instanceVar = 0; public VariantTest() { staticVar++; instanceVar++; System.out.println(“staticVar = ”++staticVar “, instanceVar = ” ++instanceVar); } }
メモリ内にはクラスの静的変数が 1 つだけあります。Java 仮想マシンは、クラスのロード処理中に静的変数にメモリを割り当てます。静的変数はメソッド領域に配置され、共有されますクラスのすべてのインスタンスによって。静的変数にはクラス名を介して直接アクセスでき、そのライフサイクルはクラスのライフサイクルに依存します。
そして、インスタンス変数はクラスのインスタンスに依存します。 Java 仮想マシンはインスタンスが作成されるたびにインスタンス変数にメモリを割り当てますが、インスタンス変数はヒープ領域に配置され、そのライフサイクルはインスタンスのライフサイクルに依存します。
public class Temp { int t; //实例变量 public static void main(String args[]){ int t=1; //局部变量 System.out.println(t); //打印局部变量 Temp a= new Temp(); //创建实例 System.out.println(a.t); //通过实例访问实例变量 } }
結果は次のようになります:
1
0 (メンバー変数にはデフォルト値がありますが、ローカル変数にはありません)
コードを次のように変更します。
public class Temp { static int t; //类变量 public static void main(String args[]){ System.out.println(t); //打印类变量 int t=1; //局部变量 System.out.println(t); //打印局部变量 Temp a= new Temp(); //创建实例 System.out.println(a.t); //通过实例访问实例变量 } }
結果は
0
1
0
です以上がJavaの静的変数とインスタンス変数の違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。