ホームページ  >  記事  >  Java  >  Java の Final キーワードについてどれくらい知っていますか?

Java の Final キーワードについてどれくらい知っていますか?

坏嘻嘻
坏嘻嘻オリジナル
2018-09-14 10:35:121347ブラウズ

初心者にとって、Tomcat は JSP とサーブレットを実行するのに非常に良い選択肢です。レジンを使用することもできますが、どちらも費用はかかりません。レジンの Xml サポートは非​​常に優れています。

1. 基本データメンバのfinalを変更する

これがC/Cのconstと同等の意味を持ち、メンバを定数として変更します。つまり、変更できないということです。たとえば、java.lang.Math クラスの PI と E は最終メンバーであり、その値は 3.141592653589793 と 2.718281828459045 です。

2. 修飾子またはオブジェクトの最終

Java では、オブジェクトを最終に変更することはできませんが、オブジェクトの参照のみを変更できます。 write public Final A a = new A(); 実際、a が指すオブジェクトのデータは変更できません。つまり、a 自体の参照値は変更できません。同じ状況が public Final int[] a = {1, 2, 3, 4, 5} などの配列でも発生します。実際、a の値は変更可能です。つまり、a[0] = 3 と書き込むことができます。 。現在の理解によれば、Java では配列内のデータを変更不可能に変更することはできませんが、C/C では変更できます。

3. 変更されたメソッドの最後は、C/C でメンバー オブジェクトを変更するために使用される const とは大きく異なります。まず、変更されたメソッドの最終的な意味は「変更不可」ではなく、継承されたメンバーによってメソッドを再定義できないことを意味します。 (ここで再定義できないと言っているのは、サブクラスが同じ名前のメソッドを定義してはいけないという意味ではないことに注意してください。親クラスのメソッドがプライベート型の場合、サブクラスはメソッドを定義できます。ここで意味するのは、 A a = new B(); のようなメソッドのオーバーライドの状況を発生させたくない場合は、メソッドを書き換えることでメソッドのオーバーライドを実現できます。 #例:

public class A {
    // final方法f
    public final void f() {
       System.out.println("类A中的final方法f被调用了");
    }
}
public class B extends A {
    // 编译错误!父类的f方法是final类型,不可重写!
    //! public void f() {
    //!     System.out.println("类B中的方法f被调用了");
    //! }
}

また、メソッドが最終メソッドとして変更される場合、コンパイラーはそのメソッドをインライン (インライン) でロードする可能性があることを意味します。いわゆるインライン メソッドは、コンパイラーが必要としないことを意味します。通常の方法で関数を呼び出す場合、メソッドを呼び出す場合は、代わりに、特定の変更を行った後、メソッド内のコードを元のコードに直接コピーします (メソッド呼び出しを行う代わりにメソッド本体を呼び出しポイントに直接挿入します)。これにより、int[] arr = new int[3] での arr.length() の呼び出しなど、コードの実行が高速化されます (関数呼び出しのオーバーヘッドが省略されるため)。

一方、プライベート メソッドもコンパイラによって暗黙的に Final として変更されます。つまり、private Final void f() と private void f() の間に違いはありません。

4. 変更されたクラスの Final

クラスが Final として変更された場合、その意味は明確です。つまり、このクラスは継承が許可されていません。が "absolutely" である場合、それを継承する操作はすべてコンパイル エラーで終了します。これは、Java が識別子として const ではなく Final を使用する理由も強調しています。 (メンバー変数はfinalではなく、メンバーメソッドは直接finalである可能性があります)

例:

       public final class A {
}
// 编译错误!A是final类型,不可被继承!
//!public class B extends A{
//!}

5. パラメータfinal

をfinalにします。オブジェクトパラメータ グルーミング。オブジェクト変数にはその参照が渡され、呼び出しプロセス中の意図しない変更を防ぐために変更されていると考えられます。

関連する推奨事項:

JAVA/JSP 学習シリーズ Three_php の基礎

JAVA/JSP 学習シリーズ One_php の基礎

以上がJava の Final キーワードについてどれくらい知っていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。