静的とは、メンバー変数とメンバーメソッドを変更するために使用される「グローバル」または「静的」を意味し、静的な静的コードブロックを形成することもできますが、Java言語にはグローバル変数の概念はありません。
静的によって変更されるメンバー変数とメンバーメソッドは、クラスの任意のオブジェクトに依存しません。つまり、クラス固有のインスタンスに依存せず、クラスのすべてのインスタンスで共有されます。
このクラスがロードされている限り、Java仮想マシンは、クラス名に従ってランタイムデータ領域のメソッドエリアでそれらを見つけることができます。したがって、そのオブジェクトのいずれかがオブジェクトを参照せずに作成される前に、静的オブジェクトにアクセスできます。
パブリックで変更された静的メンバー変数とメンバーメソッドは、本質的にグローバル変数とグローバルな方法です。クラスのオブジェクト都市を宣言する場合、静的変数のコピーを生成しますが、クラスのすべてのインスタンスは同じ静的変数を共有します。
静的変数はプライベートで変更でき、この変数はクラスの静的コードブロック、またはクラスの他の静的メンバー方法で使用できることを示します(もちろん、非静的メンバー方法でも使用できます - ナンセンス)、しかし他のクラスで使用することはできません。クラスのクラス名を直接参照することが重要です。実際、プライベートは制限されたアクセス許可であることを理解する必要があり、静的とは、インスタンス化せずに使用できることを意味し、理解しやすくなります。他のアクセスキーワードを使用した先行静的の効果も似ています。
静的によって変更されたメンバー変数とメンバーは、一般的にstaticメソッドと呼ばれます。
クラス名(パラメーターリスト...)。
クラス名
静的コードブロックは、静的コードブロックを表すために使用されます。
1。静的変数
クラスのメンバー変数は、静的に変更されているかどうかに応じて分類できます。一方は静的またはクラス変数です。
2つの違いは次のとおりです。
静的変数は、メモリ保存(メモリ保存)のみであり、静的変数のメモリ割り当てのみを割り当てますもちろん、オブジェクトを介して使用することもできます(ただし、これは推奨されません)。
たとえば、インスタンスが作成されていない場合、メモリはインスタンス変数にメモリに複数のコピーを持つことができ、互いに影響を与えません(柔軟)。
したがって、次の2つの関数が必要な場合、一般的に静的変数が使用されます。
オブジェクト間で値を共有するとき、変数にアクセスするとき
2。静的メソッド
静的メソッドはクラス名を介して直接呼び出すことができ、任意のインスタンスも呼び出すことができます。
したがって、これとスーパーは静的メソッドでは使用できません。また、属するクラスのインスタンス変数とインスタンスメソッドに直接アクセスすることはできません(つまり、静的なしのメンバー変数とメンバーメソッド)。属するクラスのメンバー変数とメンバー方法。
インスタンスメンバーは特定のオブジェクトに関連付けられているためです!これには、記憶ではなく、真実を理解し理解する必要があります! ! !
静的メソッドはどのインスタンスに依存しないため、抽象的な抽象ではなく、静的メソッドを実装する必要があります。
たとえば、コールオブメソッドを容易にするために、Java APIの数学クラスのすべてのメソッドは静的であり、一般クラス内の静的メソッドも他のクラスがこのメソッドを呼び出すのに便利です。
静的メソッドは、クラス内の特別なクラスのメソッドです。
3。静的コードブロック
静的コードブロックは、クラスのクラスメンバーに依存しない静的なステートメントブロックですJVMがクラスをロードすると、複数の静的コードブロックがある場合、JVMはクラスに表示される順序でそれらを実行し、各コードブロックは1回だけ実行されます。例えば:
パブリックテスト5 {static.out.print5(); println(tb); static {aout.out.println(a); ; system.out.println(a);
実行結果:
3
ハハハ
1000
4
5
静的コードブロックを使用して、いくつかの静的変数に割り当てることができます。実例。
4.静的と最終的なはどういう意味ですか?
静的ファイナルは、メンバー変数とメンバーメソッドを変更するために使用されます。これは、「グローバル定数」として簡単に理解できます。
変数の場合、値が指定されたら表現を変更できず、クラス名でアクセスできます。
方法の場合、表現はオーバーライドされておらず、クラス名から直接アクセスできます。
クラスメンバーを定義して、そのクラスのすべてのオブジェクトから完全に独立して使用するようにしたい場合があります。通常、クラスのメンバーはクラスのオブジェクトからアクセスする必要がありますが、特定のインスタンスを参照することなく使用できるメンバーを作成できます。このメンバーは、メンバーの宣言の前に作成できます。メンバーが静的と宣言されている場合、クラスのオブジェクトがすべてのオブジェクトを参照せずに作成される前にアクセスできます。両方の方法と変数を静的として宣言できます。静的メンバーの最も一般的な例はmain()です。プログラムの実行を開始するときにmain()を呼び出す必要があるため、静的と宣言されます。
静的として宣言された変数は、本質的にグローバル変数です。オブジェクトが宣言されると、静的変数のコピーは生成されませんが、クラスのすべてのインスタンス変数は同じ静的変数を共有します。静的として宣言された方法には、次の制限があります。
他の静的方法のみを呼び出すことができます。
静的データにのみアクセスできます。
彼らは決してこれまたはスーパーを言及することはできません(キーワードスーパーは、次の章で説明する継承に関連しています)。
計算により静的変数を初期化する必要がある場合は、静的ブロックを宣言できます。これは、クラスがロードされたときに1回だけ実行されます。次の例は、静的方法、いくつかの静的変数、および静的初期化ブロックを備えたクラスを示しています。
// static int a = 3(int x){system.out.println( "x =" + x); println( " + a); void main(string args []){meth(42)};
ユーザースティッククラスがロードされると、すべての静的ステートメントが実行されます。最初に、Aは3に設定され、次に静的ブロックが実行され(メッセージの印刷)、最後にBはA*4または12に初期化されます。次に、main()、main()を呼び出し、meth()を呼び出し、値42をxに渡します。 3つのprintln()ステートメントは、2つの静的変数aとb、およびローカル変数xを参照しています。
注:静的方法の任意のインスタンス変数を参照することは違法です。
これがプログラムの出力です:
静的ブロック初期化。
x = 42
a = 3
b = 12
それらを定義するクラスの外では、静的な方法と変数は、すべてのオブジェクトとは独立して使用できます。このようにして、クラス名の後にドット演算子を追加するだけです。たとえば、クラスの外部から静的メソッドを呼び出す場合は、次の一般的な形式を使用できます。
classname.method()
ここで、クラス名はクラスの名前で、静的メソッドが定義されています。ご覧のとおり、この形式は、オブジェクト参照変数を介して非静的メソッドを呼び出す形式に似ています。静的変数は、同じ形式(クラス名DOT演算子)でアクセスできます。これは、Javaがグローバルな機能とグローバル変数をどのように実装するかの制御バージョンです。
これが例です。 main()では、静的メソッドCallme()と静的変数Bにクラスの外にアクセスされます。
class staticdemo {static int b = 99; ){staticdemo.callme();
これがプログラムの出力です:
A = 42
b = 99
静的メンバーには、配置されているクラスによって作成されたインスタンスではアクセスできません。
静的変更のないメンバーがオブジェクトメンバーである場合、それは各オブジェクトに属します。
静的な変更を受けたメンバーはクラスメンバーであり、クラスで直接呼び出され、すべてのオブジェクトで共有できます。
この記事を通じて、将来の静的の役割を理解していますか?編集者は、あなたの学習に役立つことを期待して、あなたのためのStaticの関連記事も整理します。