Javaのfinalキーワードを深く理解する

4627 ワード

もっと読む
転入先http://www.importnew.com/7553.html
Javaのfinalキーワードは、クラス、メソッド、変数に適用できることが重要です.この文章ではfinalキーワードとは何ですか?変数、メソッド、クラスをfinalと宣言することは何を表しますか?finalを使うメリットは何ですか?最後にfinalキーワードを使用する例もいくつかあります.finalはstaticと一緒に定数を宣言するためによく使われていますが、finalがアプリケーションのパフォーマンスをどのように改善しているかも見えます.
finalキーワードの意味は?
finalはJavaで保持されているキーワードで、メンバー変数、メソッド、クラス、およびローカル変数を宣言できます.リファレンスをfinalとして宣言すると、このリファレンスを変更することはできません.コンパイラはコードをチェックします.変数を再初期化しようとすると、コンパイラはコンパイルエラーを報告します.
final変数とは?
メンバー変数またはローカル変数(メソッド内またはコードブロック内の変数をローカル変数と呼ぶ)をfinalと宣言するものをfinal変数と呼ぶ.final変数はstaticキーワードとともに定数としてよく使用されます.次はfinal変数の例です.
1
2 public static final String LOAN = "loan" ; LOAN = new String( "loan" ) //invalid compilation error
final変数は読み取り専用です.
finalメソッドとは?
finalはメソッドを宣言することもできます.メソッドの前にfinalキーワードを付けて、このメソッドがクラスのメソッドに書き換えられないことを表します.メソッドの機能が十分に完全で、サブクラスで変更する必要がないと判断した場合は、このメソッドをfinalと宣言できます.finalメソッドは非finalメソッドよりも速い.コンパイル時に静的にバインドされているため、実行時に動的にバインドする必要はない.次はfinalメソッドの例です.
1
2
3
4
5
6
7
8
9
10
11
12class 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クラスと呼びます.finalクラスは通常機能が完全であり、継承できません.Javaにはfinalのクラスがたくさんあります.例えば、String、Interger、その他のパッケージクラスなどです.次はfinalクラスの例です.
1
2
3
4
5
6
7      final class PersonalLoan{
       }
       class CheapPersonalLoan extends PersonalLoan{  //compilation error: cannot inherit from final class
  }
finalキーワードのメリット
以下にfinalキーワードを使用するメリットをまとめます
finalキーワードはパフォーマンスを向上させた.JVMとJavaアプリケーションはfinal変数をキャッシュします.
final変数は、追加の同期オーバーヘッドを必要とせずに、マルチスレッド環境で安全に共有できます.
finalキーワードを使用すると、JVMはメソッド、変数、クラスを最適化します.
不変クラス
可変クラスを作成するにはfinalキーワードを使用します.可変クラスとは、オブジェクトが作成されると変更できないことを意味します.Stringは可変クラスの代表です.可変クラスには、オブジェクトが読み取り専用で、追加の同期オーバーヘッドを必要とせずにマルチスレッド環境で安全に共有できるなど、多くのメリットがあります.
関連読書:Stringが可変でない理由と、可変クラスをどのように書くか.
finalに関する重要な知識点
finalキーワードは、メンバー変数、ローカル変数、メソッド、クラスに使用できます.
finalメンバー変数は、宣言時に初期化するか、コンストラクタで初期化する必要があります.そうしないと、コンパイルエラーが報告されます.
final変数に再び値を割り当てることはできません.
ローカル変数は、宣言時に値を割り当てる必要があります.
匿名クラスのすべての変数はfinal変数でなければなりません.
finalメソッドは書き換えられません.
finalクラスは継承できません.
finalキーワードはfinallyキーワードとは異なり、後者は例外処理に使用されます.
finalキーワードはfinalize()メソッドと混同されやすく,後者はObjectクラスで定義されたメソッドであり,ゴミ回収前にJVMに呼び出されるメソッドである.
インタフェースで宣言されたすべての変数自体はfinalです.
finalとabstractの2つのキーワードは逆相関であり、finalクラスがabstractであるはずがない.
finalメソッドはコンパイル段階でバインドされ、静的バインド(static binding)と呼ばれる.
宣言時にfinal変数を初期化していない空白final変数(blank final variable)は、コンストラクタで初期化するか、this()初期化を呼び出す必要があります.そうしないと、コンパイラは「final変数(変数名)は初期化する必要がある」とエラーを報告します.
クラス、メソッド、変数をfinalと宣言すると、パフォーマンスが向上し、JVMが推定され、最適化されます.
Javaコードの慣例に従ってfinal変数は定数であり、通常定数名は大文字:1private final int COUNT = 10 ;
集合オブジェクトに対してfinalと宣言すると、参照は変更できませんが、コンテンツを追加、削除、または変更できます.例えば、1
2
3
4 private final List Loans = new ArrayList(); list.add(“home loan”);  //valid list.add( "personal loan" ); //valid loans = new Vector();  //not valid
final変数、finalメソッド、finalクラスが何であるかはすでに知っています.必要なときにfinalを使うと、より速く、より良いコードを書くことができます.
テキストリンク: Javarevisited 翻訳: ImportNew.com - 唐小娟翻訳文リンク: http://www.importnew.com/7553.html[ 転載は原文の出典、訳者、訳文のリンクを残してください.