メンバー変数
場所:メンバー変数は、メソッド本体の外側のクラスで定義された変数です
メンバー変数には次の 2 種類があります。
①静的に変更された クラス変数(静的変数)は、クラス名を介して直接呼び出すことができます
②静的に変更されない インスタンス変数は、オブジェクト名でインスタンス変数を呼び出すオブジェクトの後(メインメソッドの新しいオブジェクトの後)に作成する必要があります
要約: メンバー変数には、クラス変数と実際の変数が含まれます
クラス変数 (静的変数)
- static によって変更される変数は static 変数と呼ばれ、本質的にはグローバル変数です
- 格納場所:メソッド領域(共有データ領域)の静的領域に格納されるため、オブジェクトの共有データとも呼ばれます。
- ライフサイクル: クラス変数はクラスのロードとともに存在し、クラスの消失とともに消滅します
- 呼び出し方法: クラス変数はオブジェクトから呼び出すことができ、クラス名からも呼び出すことができます
【イラスト】
Java でのメソッド領域の場所は、次の 3 つの状況に分けられます。
- java7以前は、メソッド領域はパーマネント世代(PermGen)に配置され、パーマネント世代とヒープは分離されていましたが、パーマネント世代のサイズは、JVM起動時に固定値に設定でき、イミュータブルです。 ;
- java7 では、静的変数は永続世代からヒープに移動されます。
- java8ではパーマネント生成が解除され、メソッドがメタスペース(Metaspace)に格納されます.メタスペースはまだヒープに接続されていませんが、物理メモリをヒープと共有しています.論理的には、ヒープ
インスタンス変数
- 格納場所: メンバー変数はオブジェクトにヒープ メモリに格納されるため、オブジェクト固有のデータとも呼ばれます。
- ライフサイクル: メンバー変数はオブジェクトの作成とともに存在し、オブジェクトのリサイクルとともに解放されます
- 呼び出し方法: メンバー変数はオブジェクトからのみ呼び出すことができます
ローカル変数
場所: クラスのメソッド本体で定義された変数 (メソッドの仮パラメーターであるか、メソッド本体で定義された変数がローカル変数であるか)
定義:メソッド、コンストラクタ、またはステートメント ブロックで定義された変数は、ローカル変数と呼ばれます。
格納場所:スタックメモリ内にローカル変数が存在し、動作範囲が終了すると変数空間は自動的に解放される
スコープ: メソッド本体の頭の中かっこから最後の中かっこまで、つまり、ローカル変数はこのメソッドでのみ呼び出すことができます
ライフ サイクル: 変数の宣言と初期化はメソッド内にあり、メソッドが終了すると、変数は自動的に破棄されます。
- ローカル変数は、関数内、ステートメント内などのローカルスコープでのみ定義され、それらが属する領域でのみ有効です。
- ローカル変数にはデフォルトの初期化値がありません
- クラスのメソッドで定義され、JVM のスタックに属し、宣言時にデフォルトの初期値はなく、初期化時に手動で割り当てる必要があります
クラス変数とローカル変数: クラス変数にはデフォルト値があり、初期化できない場合がありますが、ローカル変数は初期化する必要があります