通常、クラスメンバーはそのクラスのオブジェクトと組み合わせて。クラスをインスタンス化せずにアクセスできるクラスメンバーを定義したい場合があります。これは「静的」で実現できます。このようなメンバーを作成するには、宣言の前にキーワード「static」を付けます。
静的の利点
メンバーが静的であると宣言されている場合、そのクラスのオブジェクトが作成される前に、またはオブジェクトへの参照なしで、メンバーにアクセスできます。
main()を静的として宣言するのはなぜですか?
main()はクラスのエントリポイントです。 Javaでは、すべてのものがクラスで記述されます。コマンドプロンプトでjava filenameを実行すると、ローダーがクラスをロードし、JVMがメインメソッドを検索してクラスに入ります。したがって、main()を静的にすると、JVMはclassname.main()を介して直接それにアクセスします。
そのため、プログラム名は、メイン関数を記述したクラス名と同じにする必要があります。
覚えておくべき重要なポイント
- staticとして宣言されたインスタンス変数は、基本的にグローバル変数です。そのクラスのオブジェクトを作成するとき、静的変数のコピーは作成されません。すべてのオブジェクトで同じ静的変数を共有します。
- 静的変数またはメンバー関数は、クラス中にロードされます。つまり、インスタンス(オブジェクト)を作成する前のメイン関数は、手動で実行するプログラムの最初の実行可能な関数です。
- クラスを実際にロードする前に、静的変数の実行/初期化を取得したい場合は、すべて静的ブロックに配置します。
例えば。
静的{
System.out.println(“静的ブロックが初期化されました…”);
}
クラスのロード中にmain()メソッドの前でも実行されます。
Static使用時の制限
- 静的メソッドは静的変数のみにアクセスできます。
- 静的メソッドは静的メソッドのみを呼び出すことができます。
- 静的メソッドは、これとスーパーを参照することはできません。
プログラム
class Addition{ static int num1; static int num2; int a; int b; Addition(){ num1 = -1; num2 = -1; a = -1; b = -1; } Addition(int num1,int num2,int a,int b){ this.num1 = num1; this.num2 = num2; this.a = a; this.b = b; } static void sum(){ //System.out.println("Sum of 4 numbers is: "+(num1+num2+a+b)); /*static method can’t access static vars */ System.out.println("Sum of 'num1' and 'num2' is: "+(num1+num2)); System.out.println(); } void add(){ System.out.println("Addition of 4 numbers is: "+(num1+num2+a+b)); System.out.println(); } } class AditionDemo1{ public static void main(String args[]){ System.out.println(); System.out.println("Static method sum() called without creating any object"); System.out.println("------------------------------------------------------"); Addition.sum(); Addition ad1 = new Addition(); System.out.println("Static Method sum() is invoked second time"); System.out.println("-----------------------------------------------"); Addition.sum(); System.out.println("Non-Static Method add() is invoked using Object ad1"); System.out.println("-----------------------------------------------"); ad1.add(); Addition ad2 = new Addition(10,20,30,40); System.out.println("Static Method sum() is invoked second time"); System.out.println("-----------------------------------------------"); Addition.sum(); System.out.println("Non-Static Method add() is invoked using Object ad2"); System.out.println("-----------------------------------------------"); ad2.add(); System.out.println("Static Method sum() is invoked third time"); System.out.println("-----------------------------------------------"); Addition.sum(); System.out.println("Static Method sum() is invoked using Object"); System.out.println("-------------------------------------------"); ad1.sum(); ad2.sum(); } }
出力
Javaコードと出力の説明
コードを注意深く見ると、2つの静的変数と、2つのコンストラクターvizによって初期化される2つの非静的変数を取得しました。 1つはパラメーター化され、もう1つはデフォルトです。 1つの静的メソッドと1つの非静的メソッドを定義しました。
main()では、最初に、追加クラスのオブジェクトを作成せずに静的メソッドsum()を呼び出しました。
コードでは、静的メソッドが非静的変数にアクセスできないことがわかります。アクセスしようとすると、次のようなエラーが発生します。
ご覧のとおり、静的変数はグローバル変数のみです。オブジェクトに関係なく、静的メソッドsum()がオブジェクトによって呼び出された場合は常に同じ結果が得られます。
非静的メソッドは静的変数にアクセスできます。
非静的メソッドは静的メソッドを呼び出すことができます。
静的メソッドは、<classname>。<static method name>および<objectname>。<static method name>でも呼び出すことができます。
非静的変数の場合、各オブジェクトには、オブジェクトごとに異なる値を持つ非静的変数の異なるコピーがあります。
次に私たちはについて学びます Javaで「this」キーワードを使用する方法.
Javaプログラミングに関するより有用なチュートリアルと明確なガイドラインをここで確認してください。
コメント