趙雅智_JAva finalキーワード


finalキーワードはクラス、変数、メソッドを修飾するために使用でき、変更できません.
  • final変数
  • メンバー変数
  • クラス変数:クラスが初期化されると、クラス変数にメモリが割り当てられ、デフォルト値が割り当てられます.
  • は、付与、静的初期化ブロック
  • を表示する.
  • インスタンス変数:オブジェクトを作成すると、そのオブジェクトのインスタンス属性にメモリが割り当てられ、デフォルト値が割り当てられます.
  • には、付与値、非静的初期化ブロック、構築方法final修飾のクラス変数、インスタンス変数が初期値を指定できる場所が以下のように表示されます.クラス変数:静的初期化ブロック、または属性を宣言するときに初期値を指定します.≪インスタンス変数|Instance Variables|emdw≫:非静的初期化ブロック、属性の宣言時、または構築方法で初期値を指定します.


  • ローカル変数
  • パラメータ:
  • は割り当てられません.
  • 定義時にデフォルト値を指定すると、後のコードでは変数に値を割り当てることができません.
  • 定義時にデフォルト値が指定されていない場合、final変数には後のコードで初期値を割り当てることができますが、一度だけです.
  • 構築方法、初期化ブロックでfinalメンバー変数を初期化すると、初期化前にメンバー変数の値にアクセスしないでください.例5.13 finalメンバーの使用例.
    public class Test{
    	final int age;
    	{
    	System.out.println(age);//    
    	age=6;
    	System.out.println(age);
    	}
    	public static void main(String[] args){
    	new Test();
    	}
    }  

  • final修飾基本タイプと参照タイプ変数の違い
  • 基本タイプ:基本タイプ変数に値を再割り当てできません.
  • 参照タイプ:保存されているのは1つの参照です.finalはこの参照(アドレス)が変わらないことを保証します.つまり、同じオブジェクトをずっと参照していますが、このオブジェクトは変更できます.オブジェクトに値を割り当てることはできません.オブジェクトを使用して
  • にアクセスできます.

  • finalメソッド
  • final修飾の方法は、書き換えられないだけで、リロードできないわけではありません.
    public class TestFinalMethod{
    	public final void test(){}
    }
    class Sub extends TestFinalMethod{
    	public void test(){}
    } 
    コンパイルエラー
    public class TestFinalMethod{
    	public final void test(){}
    	public final void test(String arg){}
    }
    正しい
  • finalクラス
  • final修飾クラスにはサブクラスはありません.
    public final class FinalClass{
    	//    
    }
    class Sub extends FinalClass{
    }
    はfinal修飾のクラスを継承できないことを示す.