javaの中の修飾子finalとstatic


1.finalクラスを修飾する時、このクラスは継承されないことを表明しています。自然類の中の方法はデフォルトではfinal型です。
2.finalの飾り方は布団類のカバーが禁止されています。つまり継承されます。一つのfinalクラスでは、一つのfinal方法は一回しか実現できません。
public class Test1 {
      public final void show(){
    	  System.out.println("this is super class");
      }
}
上は下の種類の親として使います。
public class Test extends Test1 {
//	public void show(){   //             final        。
//		
//	}
        public static void main(String[] args){
           Test t=new Test();
           t.show();
        }
}
3.final修飾のメンバー変数は一回だけ与えられます。参照型の変数であれば、その変数を他のオブジェクトに向けることはできません。
                Object a=new Object();
        	final Object  b=a; //b a     ,   b    ,       
        	b=new Object();  //  
下記のaのように変化すると、bはどうなりますか?
public static void main(String[] args){
           int a=1;
           final int b=a;
          System.out.println(a);
          System.out.println(b);
            a=2;
            System.out.println(a);
            System.out.println(b);  //   b         1,       ,  b    ,     。
Finalクラスのメンバー変数は、final修飾を追加しない限り、通常通り操作できます。如き
public final class Test {
	     int   a=3;
        public static void main(String[] args){
          Test b=new Test();
          b.a=4; //  a  final      
        System.out.println(b.a); //      4.
        }
}
finalは修飾クラスのメンバー変数の場合、初期値を与えないことができますが、使用前に初期化することを保証します。それでも、これは大きな柔軟性を提供します。初期化後は変更できませんが、構造関数によって、final変数を使用対象に変更することができます。以下のとおりです
public class Test1 {
	public final int a; //     final        ,               ,          。                      //    。     final              。
	public Test1(int a){
		this.a=a;
	}
}
 
  

4,final 参数。

传递的实参数如果是final 型,而形参不要求则很容易理解。形参的改变与实参无关。如果需要传递的形参是final型,则试图改变形参值。会出错。

public class Test1 {
	    public void show(final int i){
	    	i++;//     ,          。
	}
	public static void main(String[] args){
		(new Test1()).show(3);
	}
	
}
ブログについてhttp://www.cnblogs.com/dolphin0520/p/3736238.htmlと思います

パラメータとしてのオブジェクト変数を変更する必要がない場合は、明示的にfinalを使って宣言します。意図しない修正が呼び出されたメソッド以外の変数に影響を与えることを防ぐことができます。調べてみましたが、JDKにはこんな言葉がありました。
Once a final variable has been assigned,it always contains the same value. 
If a final variable holds a reference to an oject、then the state of the object may be changed by operation on on the object、but the variable will always refer to the same oject。http://blog.csdn.net/zhengqiqiqinqin/article/details/14497479。もしfinal修飾の変数が与えられたら、変更は許されません。final修飾の変数があるオブジェクトに対する参照であると、その変数は常にオブジェクトに向けられますが、そのオブジェクトの状態は変更されます。言い換えれば、final修飾がint、double、byte、charなどの基本データタイプであれば、一度の割当値は変更できない。StringBufferのような種類のオブジェクトを修飾すると、Date型は変数を常に指しますが、オブジェクトの内容は以下のように変更できます。
public class Test1 {
	  
	  public void show (final Test test){  
		  test.i++;               //      
		  System.out.println(test.i);
	
	}
	public static void main(String[] args){
		Test t=new Test();   //  Test      ,     i   ,              2;
		(new Test1()).show(t);
	}
}
finalに会った時、一言を覚えてください。一度与えられたら、また変えてはいけません。フィnal修飾変数が対象を指すと、オブジェクト中のメンバー変数が変わりますが、ここでは変数をラベルとして特定の箱に貼り付けるような役割をしています。箱の内容は関係ないですが、ラベルを他の同じタイプの箱に貼り付けると間違えます。
static
staticの主な役割は、オブジェクトを作成しない場合、クラス名でクラス内の静的方法と静的メンバー変数にアクセスすることです。
1.staticの飾り方。
   static修飾の方法には静的でない方法と非静的変数が含まれてはならない。非静的な方法と変数は、通常はオブジェクトと一緒に結合されるからです。staticの方法は対象と関係がないです。
  static修飾された変数は、オブジェクトアクセス権限に影響を与えません。静的変数とクラスバインディングはコピーだけが存在します。オブジェクトと結合されている変数は、オブジェクトが異なるため、複数のコピーが存在しても衝突しません。
staticモジュールです。通常staticモジュールの主な役割はプログラム性能の最適化です。スピードが速いということです。
つまり、staticとは、コンピュータにある変数や方法やコードブロックを教えてくれます。一つだけ残してくれればいいです。この種類のオブジェクトは全部共有しなければなりません。staticで修飾されたものは一回しかロードしないので、特に対象が多い時に、あるコードを頻繁に使う時、staticで修飾して、プログラムの性能が優れています。
staticについての詳細説明を参照してください。http://www.cnblogs.com/dolphin0520/p/3799052.html。
static、final共通修飾の変数方法には2つの意味があり、クラスを通じて直接アクセスできます。値または上書きは変更できません。アクセスにおいては、静的な方法ではない方法で対象を静的変数法にアクセスすることができますが、クラスの方がいいという提案はありません。
本文の主な参考となる文章は上記以外にもあります。http://lavasoft.blog.51cto.com/62575/18771/ここで言うstaticとfinalの違いです。本文は自分でたくさんの牛人の書いた感想を読んで作りました。交流だけして、もし適当でないならば、伝言を残して討論して下さい。一緒に勉強して、共に向上します。