Java-クラス変数とインスタンス変数の違い
1363 ワード
メンバー変数:クラス内、メソッド体外で定義された変数をメンバー変数と呼びます.Javaのメンバー変数は、次の2つに分けられます.
1つはstatic修飾がなく、これらのメンバー変数はオブジェクト内のメンバーであり、インスタンス変数と呼ばれます.
二つ目はstatic修飾があり、クラス変数(静的変数)と呼ばれる.
静的変数(クラス変数)には、次の機能があります.クラスのロードに伴って がロードする.は、オブジェクトの存在よりも優先する である.は、すべてのオブジェクトによって共有される である.は、クラス名によって直接呼び出すことができる
クラス変数とインスタンス変数の違いは、次のとおりです.
1、保管場所.
クラス変数は、クラスのロードに伴ってメソッド領域に存在します.
インスタンス変数は、オブジェクトが作成されるにつれてスタックメモリに存在します.
2、ライフサイクル:
クラス変数のライフサイクルが最も長く、クラスが消えるにつれて消えます.
インスタンス変数のライフサイクルは、オブジェクトが消えるにつれて消えます.
Javaのメソッド領域の位置は、次の3つに分けられます.
1、java 7の前に、メソッドエリアはPermGen(PermGen)にあり、永続世代とスタックは互いに隔離されており、永続世代のサイズはJVMを起動する時に固定値を設定することができ、可変ではない.
2、java 7ではstatic変数が永久代からスタックに移行する.
3、java 8では、永続世代をキャンセルし、メソッドはメタ空間(Metaspace)に格納され、メタ空間は依然としてスタックに接続されていないが、スタックと物理メモリを共有し、論理的にスタックに存在すると考えられる.
1つはstatic修飾がなく、これらのメンバー変数はオブジェクト内のメンバーであり、インスタンス変数と呼ばれます.
二つ目はstatic修飾があり、クラス変数(静的変数)と呼ばれる.
静的変数(クラス変数)には、次の機能があります.
クラス変数とインスタンス変数の違いは、次のとおりです.
1、保管場所.
クラス変数は、クラスのロードに伴ってメソッド領域に存在します.
インスタンス変数は、オブジェクトが作成されるにつれてスタックメモリに存在します.
2、ライフサイクル:
クラス変数のライフサイクルが最も長く、クラスが消えるにつれて消えます.
インスタンス変数のライフサイクルは、オブジェクトが消えるにつれて消えます.
Javaのメソッド領域の位置は、次の3つに分けられます.
1、java 7の前に、メソッドエリアはPermGen(PermGen)にあり、永続世代とスタックは互いに隔離されており、永続世代のサイズはJVMを起動する時に固定値を設定することができ、可変ではない.
2、java 7ではstatic変数が永久代からスタックに移行する.
3、java 8では、永続世代をキャンセルし、メソッドはメタ空間(Metaspace)に格納され、メタ空間は依然としてスタックに接続されていないが、スタックと物理メモリを共有し、論理的にスタックに存在すると考えられる.
class Person
{
String name;// , 。
static String country = "CN";// , 。
public static void show()
{
System.out.println("::::");
//this.haha();// this
}
public void haha()
{
System.out.println("hahaha...");
}
}
class StaticDemo
{
public static void main(String[] args)
{
Person p = new Person();
p.haha(); //
Person.show();// , ( )
}
}
/*
hahaha...
::::
*/