"Indepth Java (4)" - final 属性と、メイン関数が静的型でなければならない理由

「4月リクシン計画アップデートイベント」に参加して5日目。

  • Java では、最終属性とは、最終としてマークされた属性、つまり、初期化後に値を変更できない定数属性を指します。final 属性は通常、不変の定数を表すために使用され、その一般的な定義方法は次のとおりです。

  • final 属性を使用する場合は、次の点に注意する必要があります。

    • final 属性は、宣言時またはコンストラクターで初期化する必要があります。そうしないと、コンパイル エラーが発生します。
    • 最終的なプロパティが初期化されると、その値は変更できなくなります。
    • 最終属性は基本型でもオブジェクト型でもかまいませんが、オブジェクト型の場合は参照のみ保証でき、内部状態は保証できません。
    • final 属性は通常、静的属性として定義されるため、クラスのロード時に初期化できるため、計算と初期化の繰り返しによるオーバーヘッドを回避できます。
    • 最終的な属性は通常、大文字とアンダースコアで構成される命名スタイルを使用して、通常の属性と区別します。つまり、final 属性は Java の定数属性であり、初期化後に値を変更することはできず、通常は不変の定数を表すために使用されます。
  • JAVAでfinalでメソッドを変更するとどうなるか、オブジェクトを変更するとどうなるか

    • 最終変更メソッド: 最終変更メソッドは最終メソッドと呼ばれ、サブクラスによってオーバーライドすることはできません。通常、最後のメソッドは、メソッドをオーバーライドするときに、サブクラスが親クラスのコード ロジックを壊さないようにすることです。
      メソッドがプライベート、静的、または最終として宣言されている場合、これらの修飾子はサブクラスによって継承およびオーバーライドできないため、デフォルトで最終メソッドであることに注意してください。
    • 最終的に変更されたオブジェクト (最終的に変更されたオブジェクトは、作成後にオブジェクトの状態を変更できないことを意味します): 最終的に変更されたオブジェクトは不変オブジェクトと呼ばれ、作成後にその状態を変更することはできません。一般に、不変オブジェクトは変更できず、同期する必要がないため、マルチスレッド環境で使用する方が安全です。
    • 不変オブジェクトを作成するには、次の点に注意してください。

      • すべてのメンバー変数は、コンストラクターで final として宣言し、初期化する必要があります。
      • 状態を変更する set メソッドやメンバー メソッドなど、状態を変更するメソッドは提供しません。
      • オブジェクトに他のオブジェクトへの参照が含まれている場合、これらのオブジェクトも不変であることが保証される必要があります。
  • また、finalでもクラスを変更でき、finalで変更したクラスは継承できないメソッドになる

  • メイン関数が静的関数でなければならない理由 (さらに、メイン関数のパラメーター リストに文字列配列がある理由)

    • 質問 1:

      • Java でメイン関数が静的メソッドでなければならない理由は、Java ではメイン関数がプログラムのエントリ ポイントであるためです。つまり、プログラムの開始時に最初に実行されるメソッドがメイン関数です。静的メソッドは、オブジェクトを作成せずに直接呼び出すことができるクラス レベルのメソッドです。
      • Java 仮想マシン (JVM) は、開始時に、指定されたクラス名に基づいてクラスを探してロードします。次に、そのクラスで public static void main(String[] args) メソッドを見つけようとし、プログラムのエントリ ポイントとして実行します。したがって、メイン メソッドは、JVM がアクセスできるように public として定義する必要がありますが、クラスをインスタンス化せずに呼び出すことができるように static としても定義する必要があります。
      • メイン メソッドが静的メソッドとして定義されていない場合、プログラムの開始時にこのクラスのインスタンスを最初に作成する必要があります。次に、インスタンスのメイン メソッドをプログラムのエントリ ポイントとして呼び出すことができます。これにより、起動時間とメモリ オーバーヘッドが増加します。 . 静的メソッドは、インスタンスを作成せずにクラス名を介して直接呼び出すことができるため、より効率的です。
    • 質問 2:

      • main 関数のパラメーターも固定されており、文字列配列をパラメーターとして受け入れる必要があることに注意してください。これは通常、プログラムの開始時にコマンド ライン パラメーターを渡すために使用されます。たとえば、次のコマンド ラインを使用して、プログラムを開始し、パラメーターを渡すことができます。画像.png
      • 上記のコマンド ラインで、arg1 と arg2 は main 関数に渡されるパラメーターであり、文字列配列にカプセル化され、main 関数のパラメーターとして渡されます。

おすすめ

転載: juejin.im/post/7222282361265831997