ホームページ >Java >&#&チュートリアル >最終的な総合的な詳細分析

最終的な総合的な詳細分析

巴扎黑
巴扎黑オリジナル
2017-07-19 13:14:131152ブラウズ


Javaにはキーワードfinalがあり、変数はfinal型として宣言でき、final型変数は一度しか代入できません。最終変数に繰り返し値が代入されると、コンパイル エラーが発生します。


final キーワードの意味は何ですか?

final は、メンバー変数、メソッド、クラス、ローカル変数を宣言できる Java の予約キーワードです。参照を Final として宣言すると、その参照を変更することはできなくなり、変数を再度初期化しようとすると、コンパイラによってコードがチェックされ、コンパイル エラーが報告されます。

最終変数とは何ですか?

final として宣言されたメンバー変数またはローカル変数 (メソッドまたはコード ブロック内の変数はローカル変数と呼ばれます) は、final 変数と呼ばれます。 Final 変数は、定数として static キーワードとともに使用されることがよくあります。以下は、final 変数の例です:

public static Final String LOAN = "loan";

LOAN = new String("loan") //無効なコンパイル エラー

final 変数は次のとおりです。読み取り専用。

final メソッドとは何ですか?

Final ではメソッドを宣言することもできます。メソッドの前に Final キーワードを追加することは、このメソッドがサブクラスのメソッドによってオーバーライドできないことを意味します。メソッドの機能が十分に完成しており、サブクラスで変更する必要がないと思われる場合は、メソッドを Final として宣言できます。最終メソッドは、コンパイル時に静的にバインドされ、実行時に動的にバインドする必要がないため、非最終メソッドより高速です。以下は、final メソッドの例です:

class PersonalLoan{
    public final String getName(){
        return "personal loan";
    }
}
 
class CheapPersonalLoan extends PersonalLoan{
    @Override
    public final String getName(){
        return "cheap personal loan"; //compilation error: overridden method is final
    }
}

final クラスとは何ですか?

finalで変更されたクラスをfinalクラスと呼びます。通常、最終クラスは機能的に完成しており、継承することはできません。 Java には、String、Interger、その他のラッパー クラスなど、final クラスが多数あります。以下は、final クラスの例です:

final class PersonalLoan{
 
    }
 
    class CheapPersonalLoan extends PersonalLoan{  //compilation error: cannot inherit from final class
 
}

final キーワードの利点

以下に、final キーワードを使用する利点をいくつかまとめます

Final キーワードにより、パフォーマンスが向上します。 JVM と Java アプリケーションはどちらも最終変数をキャッシュします。

Final 変数は、追加の同期オーバーヘッドなしでマルチスレッド環境で安全に共有できます。

final キーワードを使用すると、JVM はメソッド、変数、クラスを最適化します。

実質的に Final

変数は、次の状況にある場合に限り、実質的に考慮されます

1. Final として宣言されていない

2. 値を 1 回だけ割り当てます

Final を効果的に説明する最も簡単な方法このような変更後もプログラムがエラーなく実行され (コンパイルが成功した場合は ^0^)、元の実行結果と一致する場合、この変数は事実上有効であると言えます。最後の。

final の利点

ローカル変数を有効な不変変数に制限することで、開発者が並行性とスレッドセーフな開発をより適切に処理できるように設計されています。 可変フィールドは、適切に管理されていない場合、常に同時実行の問題の潜在的な原因となります。

finalキーワードの使用

変数やメソッドのパラメータなどをfinalとして宣言するのは良い習慣だと思います。これを脇に置き、final として宣言すると、クラス ファイルにコンパイルするときにコンパイラが適切に最適化します。

「クラス ファイルの最適化を達成するためにソース ファイルで Final キーワードを使用するのは間違っている」に対しては多くの議論があります。final キーワードの使用については、Robert Simons Jr の「

Hardcore Java」を読むことを強くお勧めします。最適化された詳細コンテンツ。

アプリケーションでは、final キーワードによりコードの意図が明確になり、宣言後に変更されないため、非常に安全です。

public class FinalTest {

    public static final int N_ITERATIONS = 10_00_000;

    public static String testFinal() {
        final String a = "a";
        final String b = "b";
        return a + b;
    }

    public static String testNonFinal() {
        String a = "a";
        String b = "b";
        return a + b;
    }

    public static void main(String[] args) {
        long tStart, tElapsed;

        tStart = System.currentTimeMillis();
        for (int i = 0; i < N_ITERATIONS; i++)
            testFinal();
        tElapsed = System.currentTimeMillis() - tStart;
        System.out.println("Method with finals took " + tElapsed + " ms");

        tStart = System.currentTimeMillis();
        for (int i = 0; i < N_ITERATIONS; i++)
            testNonFinal();
        tElapsed = System.currentTimeMillis() - tStart;
        System.out.println("Method without finals took " + tElapsed + " ms");

    }

}
実行結果:

Method with finals took 5 ms
Method without finals took 273 ms
概要

final は、宣言した変数をより安全にし、コードをより明確に見せることができます。 Java では、不変クラスの使用も推奨されています。


以上が最終的な総合的な詳細分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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