Javaのstatic、finalキーワード

3016 ワード

一、staticキーワード
  • は、メンバー変数およびメンバーメソッド
  • を修飾することができる.
  • staticキーワードの特徴
  • クラスのロードに伴って
  • がロードする.
  • は、オブジェクトの存在よりも優先する
  • である.
  • はクラスのすべてのオブジェクトによって共有されます
  • これも静的キーワードを使用するか否かを判断する条件
  • である.
  • はクラス名で
  • を呼び出すことができる.
    /** * Created by taoyali on 2016/10/25. */public class JavaKeyWorld {        
    public static void main(String[] args) {            
    JavaKeyWorldTest s = new JavaKeyWorldTest();            System.out.println(s.num);           
     s.resetNum2();
     System.out.println(JavaKeyWorldTest.num2);            JavaKeyWorldTest.resetNum2();            System.out.println(JavaKeyWorldTest.num2);           
     System.out.println(s.num2);        
    }
    }
    
    class JavaKeyWorldTest {    
    //         
    int num = 10;    
    //        
    static int num2 = 20;    
    public static void resetNum2(){       
     num2 += (int)Math.random();   
     } 
    
    public void resetNum2(int num){       
        num2 += (int)Math.random();    
    }   
    
    public int backInt(){       
        return (int)Math.random();  
     } 
    public  void  backInt(int num){    
    }
    }
    
  • staticキーワード注意事項
  • 静的メソッドではthisキーワードのない
  • 静的メソッドは、静的メンバー変数および静的メンバーメソッド
  • にのみアクセス可能である.
    私たちはどのように理解しますか?1.静的はクラスのロードに伴ってロードされ、thisはオブジェクトの作成に伴って存在します.2.静的比オブジェクトが先に存在します.3.静的メソッド:メンバー変数:静的変数メンバーメソッドのみアクセス:静的メンバーメソッドのみアクセス4.非静的メソッド:メンバー変数:静的であっても非静的であってもよいメンバーメソッド:静的メンバーメソッドであっても非静的メンバーメソッドであってもよい.簡単な理解では、静的は静的にしかアクセスできません.
    staticキーワードを学びましたので、静的変数とメンバー変数**の違いを学び続けましょう.
  • A:属する異なる静的変数:クラスに属し、クラス変数メンバー変数:オブジェクトに属し、オブジェクト変数、インスタンス変数
  • B:メモリ位置の異なる静的変数:メソッド領域の静的領域メンバー変数:スタックメモリ
  • C:ライフサイクルの異なる静的変数:静的変数はクラスのロードに伴ってロードされ、クラスの消失に伴って消失するメンバー変数:メンバー変数はオブジェクトの作成に伴って存在し、オブジェクトの消失に伴って消失する
  • .
  • D:異なる静的変数を呼び出す:オブジェクト名で呼び出すか、クラス名でメンバー変数を呼び出すか:オブジェクト名でのみ呼び出す
  • .
    二、finalキーワード
    final         ,     ,    ,    。
           ,      
            ,        ,       
            ,       
    
           Demo     final   
    
    class Fu {
         public int num = 10; 
         public final int num2 = 20; 
       /* public final void show() { } */
    }
    class Zi extends Fu { 
        // Zi  show()    Fu  show()
        public void show() { 
            num = 100; System.out.println(num); 
          //       num2    
          // num2 = 200; 
         //        
         System.out.println(num2); 
       }
    }
     public class FinalDemo{
        public static void main(String[] args) { 
             Zi z = new Zi(); z.show();
        }
    }
    

    ではfinalは継承の中でどのように体現しているのでしょうか.
    継承中のメソッドには、メソッドの書き換えという現象があるためです.だから、親の機能は布団類で覆われてしまいます.子クラスが親クラスの機能を上書きしないように、彼にしか使えない場合があるので、javaはこのような状況に対してキーワード:finalを提供しています.
    class Fu { 
         public final void show() { 
                System.out.println("       ,        "); 
        }
    } 
     class Zi extends Fu { 
         // Zi  show()    Fu  show()
        // 
         public void show() {
        // System.out.println("      ");//
        }
    }
    
    public class FinalDemo{ 
        public static void main(String[] args) {
           Zi z = new Zi(); 
           z.show(); 
        }
    }
    

    出力結果:親クラスの出力結果に違いありません.