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

王林
リリース: 2020-06-10 16:18:10
転載
3235 人が閲覧しました

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート