1. static は何を表しますか
Java にはグローバル変数の概念はありませんが、Java では static は「グローバル」または「静的」を意味し、変更するために使用されます。メンバー変数とメンバー メソッド、そしてもちろんコード ブロック。
Java はメモリをスタック メモリとヒープ メモリに分割し、スタック メモリはいくつかの基本的なタイプの変数、配列、オブジェクト参照を格納するために使用され、ヒープ メモリは主に一部のオブジェクトを格納します。 JVM がクラスをロードするとき、クラスに静的に変更されたメンバー変数とメンバー メソッドがある場合、これらの「固定」機能を使用して、固定サイズのメモリ領域がこれらのメンバー変数とメンバー メソッド用に固定された場所に開かれます。非常に便利にアクセスできます。同時に、静的メンバー変数とメンバー メソッドがスコープ外にならない場合、それらのハンドルは変更されません。同時に、static に含まれる「静的」という概念は、修復不可能、つまり、その場所を変更すると、クリーンアップしても元の状態に戻らないことを意味します。戻ってくる。
static によって変更されたメンバー変数とメンバー メソッドは、特定のインスタンス変数に依存しません。つまり、クラスのすべてのインスタンスで共有されます。すべてのインスタンスの参照は同じ場所を指しており、いずれかのインスタンスを変更すると、他のインスタンスも変更されます。
public class User { private static int userNumber = 0 ; public User(){ userNumber ++; } public static void main(String[] args) { User user1 = new User(); User user2 = new User(); System.out.println("user1 userNumber:" + User.userNumber); System.out.println("user2 userNumber:" + User.userNumber); } } ------------ Output: user1 userNumber:2 user2 userNumber:2
2. static の使い方
static は、クラス名を通じて直接アクセスできるメンバー変数およびメンバーメソッドを変更するために使用できます。 ClassName..PropertyName
ClassName.MethodName (...)
静的変更コード ブロックは、JVM がロードされると、このコードが実行されることを示します。これは非常に便利です。 (ここ数日のコードブロックの使用については注意してください)
2.1. 静的変数
static で変更された変数は static 変数と呼ばれ、static で変更されなかった変数はインスタンス変数と呼ばれます。違いは次のとおりです:
静的変数は、クラスがロードされるときに初期化され、メモリ内に 1 つだけあり、JVM は一度だけメモリを割り当てます。同時に、クラスのすべてのインスタンスが共有します。静的変数。クラス名を直接渡すとアクセスできます。
しかし、インスタンス変数は異なります。インスタンスが作成されるたびにインスタンス変数が生成され、インスタンスとともに存続し、消滅します。
したがって、私たちは通常、オブジェクト間でのデータ共有と簡単なアクセスという 2 つの状況で静的変数を使用します。
2.2. 静的メソッド
静的に変更されたメソッドは静的メソッドと呼ばれ、クラス名を通じて直接呼び出します。クラスがロードされたときに存在するため、インスタンスに依存せず、静的メソッドを実装する必要があります。つまり、抽象メソッドにすることはできません。
静的メソッドはクラス内の特別なメソッドです。本当に必要な場合にのみメソッドを静的として宣言します。たとえば、Math クラスのすべてのメソッドは静的です。
2.3. 静的コードブロック
静的コードブロックはクラスがロードされると実行され、どこにでも配置できます。
3. 静的の制限
Static には多くの機能がありますが、いくつかの欠点もあります。
1. 静的変数のみを呼び出すことができます。
2. 静的メソッドのみを呼び出すことができます。
3. this と super はいかなる形式でも引用できません。
4. 静的変数は定義時に初期化する必要があり、初期化時間は非静的変数よりも早くなければなりません。
要約: 変数、メソッド、またはコード ブロックのいずれであっても、静的に変更されている限り、クラスがロードされた時点で「準備完了」になります。つまり、使用できるか実行されています。オブジェクトがなくても実行できます。逆に、static がない場合は、オブジェクト インスタンスに依存する必要があります。
上記は Java 改善章 (6) の内容です ----- キーワード static の詳細については、PHP 中国語 Web サイト (www.php.cn) に注目してください。