静的に変更されたメンバー変数
メンバー変数の分類
クラスのメンバ変数は、静的変更の有無によりクラス変数とインスタンス変数(オブジェクト変数)の2種類に分けられます。
- クラス変数: 静的な変更があり、クラスに属し、コンピューター内にコピーが 1 つだけあり、クラスのすべてのオブジェクトで共有されます。
- インスタンス変数: 静的な変更はなく、各オブジェクトに属し、インスタンス化された各オブジェクトは相互に影響しません。
/*
作者:絮纸为花
*/
public class Student{
//类变量,所有实例化对象都用这一个
static String name;
//实例变量,每个实例化对象都有自己的,互不影响
int age;
}
- クラス名. クラス変数 (この呼び出しメソッドを使用すると、インスタンス変数にはオブジェクト. インスタンス変数を使用してのみアクセスできるため、この変数がクラス変数であることが明確にわかります。同様のことがインスタンス メソッドにも当てはまります。)
- Object.Class 変数 (混同しやすい)
メンバー変数の仕組み
メモリはスタック、ヒープ、メソッド領域、この3つの部分として考えられます。
main関数を実行すると、記述したクラスがメソッド領域に配置されて実行されます。main関数を含むクラスもメソッド領域に配置されて実行されます。記述したクラス内の変数もメソッド領域に配置されます。 。
クラス変数がある場合、そのクラス変数はヒープ領域に配置されます。
次に main 関数本体が実行され、作成したインスタンス化されたオブジェクトがスタック領域に配置されて実行されます。
クラス変数を変更する
オブジェクトをインスタンス化してクラス変数を変更する場合、順序は次のようになります。
スタック (インスタンス化されたオブジェクト) -> ヒープ (はい、ただしインスタンス化が見つかりません) -> メソッド領域 (インスタンス化されたオブジェクトはメソッド領域の上位に報告され、上位はヒープ領域内のクラス変数のアドレスを持ちます) 、見つけて変更してください)
クラス名を使用して変更する場合は、メソッド領域から直接開始します。
インスタンス変数を変更する
スタック (インスタンス化されたオブジェクト) -> ヒープ (はい、直接変更)
アプリケーションシナリオ
特定のデータのコピーは 1 つだけ共有、アクセス、変更でき、クラス変数も使用できます。
インスタンス化されたすべてのオブジェクトには、インスタンス変数を使用してそれが必要です。
静的に変更されたメンバーメソッド
同様に、静的に変更されたメンバー変数とほぼ同じです。
違いは、クラスメソッドがヒープ領域に配置されるのではなく、メソッド領域にクラスと一緒に配置されることです (メソッド領域とは、名前が示すように、メソッドが格納されるメモリパーティションです)。
したがって、インスタンス オブジェクトを通じてクラス メソッドにアクセスする場合、メソッド領域を使用してクラス メソッドを見つけるだけで済みます。
よく見ると、main メソッドもクラス メソッドであることがわかります。
実行するjavaクラス名——》クラス名.main
main メソッドはパラメーターも受け入れることができます。cmd では、コンパイル後、実行時に、Java クラス名のパラメーターが main に渡されます。String 配列をトラバースして、渡したパラメーターにアクセスできます。
クラスメソッド適用シナリオ:ツールクラスとして(特定のアルゴリズムやデータ構造など、事前に記述されたメソッド)
ツール: 再利用性を向上させ、メモリを節約します。
ユーティリティ クラスを作成する場合は、誤ってオブジェクトを作成しないように、ユーティリティ クラスのコンストラクターをプライベートにする必要があります。
静電気予防策
- クラス メソッドはクラス メンバーに直接アクセスできますが、インスタンス メンバーに直接アクセスすることはできません。
- インスタンス メソッドでは、クラス メンバーとインスタンス メンバーに直接アクセスできます。
- this キーワードはインスタンス メソッドでは使用できますが、クラス メソッドでは使用できません。
主な考え方: クラスはテンプレート、インスタンスは製品、最初にテンプレートがあり、次に製品があります。
製品はテンプレートとそれ自体を使用しますが、テンプレートは製品を使用できず、テンプレートはテンプレート自体のみを使用できます。
コードブロック
コード ブロックは、クラスの 5 つの主要コンポーネント (メンバー変数、コンストラクター、メソッド、コード ブロック、内部クラス) の 1 つです。
コード ブロックには 2 つのタイプがあります。
静的コードブロック:
- 形式: 静的{ }
- 特徴: クラスのロード時に自動的に実行されます。クラスは 1 回しかロードされないため、静的コード ブロックも 1 回実行されます。
- 機能: クラスの初期化を完了します。公式ツールのクラス初期化は多目的です
コードブロックの例:
- 形式: 静的{ }
- 特徴: オブジェクトが作成されるたびに、インスタンス コード ブロックが実行され、コンストラクターの前に実行されます。
- 機能: コンストラクターと同様に、クラスの初期化を完了します。