ホームページ  >  記事  >  Java  >  Javaの静的と非静的の違いは何ですか

Javaの静的と非静的の違いは何ですか

王林
王林転載
2020-06-10 16:18:103239ブラウズ

Javaの静的と非静的の違いは何ですか

まず、JVM メモリ モデルについて説明します。

JVM メモリは、メソッド領域、ヒープ、スタック、プログラム カウンターに分割されます。

メソッド領域、スタック、ヒープについて簡単に説明します:

メソッド領域: 各スレッドによって共有される領域であり、クラス情報/定数/静的変数を格納します。

Stack: 実際には、各スレッドにはスタックが割り当てられ、そのライフサイクルはスレッドのライフサイクルと同じです。メソッドを実行すると、スタック フレームが生成されます。スタック フレームにはメソッド内のローカル変数が含まれます。

ヒープ: すべてのクラスのインスタンス化はヒープに保存されます。

(ビデオ チュートリアルの推奨: java ビデオ チュートリアル)

1. メモリの観点から静的と非静的の違いを分析する

静的は、メンバ変数とメンバメソッドを変更します。その値が格納されるアドレスは、メソッド領域の定数プールです。実行順序は、静的に変更された変数名またはメソッドを定数プールに格納するときに実行されます。クラスをロードしています。

静的に変更されない変数は、メンバー変数とローカル変数にすることができます。

メンバー変数は、オブジェクトがクラスの一部であり、そのアドレスがヒープ内にあるため、オブジェクトが格納されているアドレスと同じです。

ローカル変数は通常、メソッド内で宣言され、その格納アドレスはスタック上にあります。

2. 実行メカニズムからの分析

ソース コードがコンパイラーによって .class バイトコード ファイルにコンパイルされるとき、クラスがロードされると、クラスは変更されます。 with static ブロック/変数/メソッドはすぐにメソッド領域に格納されます。同時に、非静的ブロック/変数/メソッドはまだコンパイルされていません。非静的変数が静的メソッドに格納されると、プログラム カウンタはローカル変数を示しますが、この時点ではローカル変数がコンパイルされていないため、エラーが報告されます。

推奨チュートリアル: java エントリー プログラム

以上がJavaの静的と非静的の違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。