次のエディターは、Java の静的問題と動的問題について詳しく説明した記事を提供します。編集者はこれがとても良いものだと思ったので、皆さんの参考として今から共有します。エディターに従って見てみましょう
非静的フィールドへの静的参照は作成できません
静的メソッドは非静的メンバー変数およびメソッドを参照できません
class A { private int a = 1; public sttaic void main(String[] args){ System.out.println(a); } }
インスタンス変数は特定のオブジェクトのステータスである必要があるため、最初に A a = new A(); 次に System.out.println(a,a);
または変数を static に変更する必要があります
タイプ EventApp4 を囲むインスタンスはアクセスできません。 EventApp4 型の囲みインスタンス (例: 内部クラス)。これはなぜ問題を引き起こすのでしょうか? 静的メソッドと変数はクラスがロードされたときにすでにメモリに入っていますが、非静的メソッドと変数はインスタンス化後にのみメモリに入ることができるため、静的メソッドでは new は静的内部クラスではないからです。内部クラスがまだ存在しないため、エラーが発生します。逆に、動的メソッド内の新しい静的メソッドにはエラーは発生しません。同様の理由で、静的メソッドは非静的メソッドよりも先に存在します。
Javaのメモリメカニズムから分析すると、まず、オブジェクトをNewするとき、ヒープ内のオブジェクト用のメモリ空間を最初に開くのではなく、まずクラスに静的メソッド(静的変更を伴う静的関数)を追加します。コードはメソッド領域と呼ばれる場所にロードされ、ヒープ メモリにオブジェクトが作成されます。したがって、クラスがロードされると静的メソッドもロードされます。オブジェクトを新規作成する場合、そのオブジェクトは通常、メモリ内に存在します。ただし、新しいオブジェクトがない場合は、クラス名を使用してクラスの静的メソッドを呼び出すこともできます。 問題が発生した場合は、次の原則があります
1. main では、静的メソッド、静的変数、静的クラスを使用します。つまり、変数とメソッドを static に制限します2。 , このクラスまたは他のクラス (使用するクラス) をインスタンス化します3. main のステートメントをコンストラクターに入れて、このクラスへの参照をコンストラクター内で使用できるため、main でこのクラスをインスタンス化します
以上がJava の静的および動的問題解決の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。