メンバー変数とローカル変数の違い

5978 ワード

メンバー変数とローカル変数の違いメンバー変数とローカル変数の違い
1、クラス内の位置が違う
メンバー変数:クラス内のメソッドの外側
ローカル変数:メソッドまたはコードブロック、またはメソッドの宣言(パラメータリスト)
2、メモリの中の位置が違うので、Javaプログラムのメモリの簡単な分析を見ることができます
≪メンバー変数|Member Variables|oem_src≫:スタック内(メソッド領域の静的領域)
ローカル変数:スタック内
3、ライフサイクルが違う
≪メンバー変数|Member Variables|oem_src≫:オブジェクトが作成されるにつれて存在し、オブジェクトが消失するにつれて消失します.
ローカル変数:メソッドの呼び出しまたはコードブロックの実行に伴って存在し、メソッドの呼び出しが完了するか、コードブロックの実行が完了するにつれて消失する
4、初期値
メンバー変数:デフォルト初期値あり
ローカル変数:デフォルトの初期値がなく、使用前に値を割り当てる必要があります.そうしないと、コンパイラがエラーを報告します(The local variable xxx may not have been initialized)
1 package demo;
 2 
 3 public class VariableDemo {
 4     String name = "    ";
 5 
 6     public static void main(String[] args) {
 7         new VariableDemo().show();
 8     }
 9 
10     public void show() {
11         String name = "    ";
12         System.out.println(name);
13     }
14 }

出力結果:ローカル変数showメソッドで定義されたname変数が出力されているのを見て、変数を使用する際に従う原則は近接原則ですが、メンバー変数nameにどのようにアクセスするか、Javaではthis(呼び出しオブジェクト自体を表す)というキーワードがメンバー変数にアクセスするために提供されています.
 1 package demo;
 2 
 3 public class VariableDemo {
 4     String name = "    ";
 5 
 6     public static void main(String[] args) {
 7         new VariableDemo().show();
 8     }
 9 
10     public void show() {
11         String name = "    ";
12         System.out.println(this.name);
13     }
14 }

出力結果:メンバー変数
転載:https://www.cnblogs.com/huangminwen/p/5935130.html
メンバー変数とローカル変数
変数の位置を定義することによって、変数をメンバー変数とローカル変数メンバー変数に分けることができます.クラス範囲内で定義された変数ローカル変数は、メソッド内で定義された変数です.
メンバー変数は、インスタンス属性(static修飾を使用しない)がインスタンス属性の存在に伴って存在するクラス属性(static修飾)がクラスの存在に伴って存在することに分けられます.
メンバー変数は明示的に初期化する必要がなく、自動的にデフォルトの初期化が行われます.
ローカル変数は、パラメータ(形式パラメータ)がメソッド全体にわたって有効なメソッドローカル変数(メソッド内定義)この変数の定義からメソッドの終了までの期間に有効なコードブロックローカル変数(コードブロック内定義)がこの変数の定義から世代コードブロックの終了までの期間に有効である
ローカル変数は、パラメータ以外に初期化を表示する必要があります.つまり、初期値を指定する必要があります.そうしないとアクセスできません.
サンプルコード:
package object;

/**
 *          
 * 
 * */
public class VariableTest {
    
    //    
    public static String staticname = "   ";
    public String nostaticname = "    ";
    
    //          
    public static String staticname1;
    public String nostaticname1;
    
    //      
    public void info(){
        //            i
        //int i;
        //           ,       
        //System.out.println(i);
        //        i    
        int i = 10;
        //  i
        System.out.println(i);
    }
    
    //          
    public static void infos(){
        int i = 20;
        System.out.println(i);
    }
    
    public static void main(String[] args) {
        /*   :              ?*/
        //                ,         
        System.out.println(VariableTest.staticname);//  :   
        //       ,          
        VariableTest vt = new VariableTest();
        System.out.println(vt.nostaticname);//  :    
        /*---   :      ,               ---*/
        
        System.out.println("----------");
        
        /*   :            ?*/
        //             
        System.out.println(VariableTest.staticname1);//  :null
        //                  
        System.out.println(vt.nostaticname1);//  :null
        /*---   :            ,           ---*/
        
        System.out.println("----------");
        
        /*   :                    ?*/
        //vt.staticname; 
        //     
        //Syntax error, insert "VariableDeclarators" to complete LocalVariableDeclaration
        //  :    ,  “     ”         
        /*      。         eclipse   
         *               test
         *     ,       ,        
         *VariableTest.staticname
         *    ,           ,         */
        vt.staticname = "       ";
        //          ,     ...   
        //The static field Variable Test.static name should be accessed in a static way
        //  :        。                
        System.out.println(vt.staticname);//  :       
        //       ,      ,  ↑
        /*  :             ,        ,      ,    
         *         ,           */
        
        System.out.println("----------");
        
        //           
        /*   :           ,         ?*/
        //    
        vt.info();//  :10
        //     info  i ?
        //System.out.println(i);
        //  :i cannot be resolved to a variable
        //  :i          
        /*  :           ,           */
        
        System.out.println("----------");
        
        //            
        /*   :            ,          ?*/
        {
            int j = 11;
            System.out.println(j);//  :11
        }
        //     
        //System.out.println(j);
        //    ,        
        /*            ,           */
        
        System.out.println("----------");
        
        //  :      
        infos();//  :20
        //      
        //System.out.println(i);
        
    }
}

JAvaでは、ローカル変数とメンバー変数の名前を変更できます.ローカル変数はメンバー変数の値を上書きします.
コードの例:
package object;

/**
 *           
 * */
public class VariableCover {
    
    /*                 ,
     *             */
    //      
    public String city = "  ";
    private static String citys = "  ";
    //      
    public void function(){
        String city = "  ";
        //  
        //                 
        System.out.println(city);//  :  
        //        ,   this
        System.out.println(this.city);//  :  
    }
    
    public static void main(String[] args) {
        String citys = "  ";
        //                 
        System.out.println(citys);//  :  
        //               
        System.out.println(VariableCover.citys);//  :  
        
        String city = "  ";
        System.out.println(city);//  :  
        //     
        System.out.println(new VariableCover().city);//  :  
        new VariableCover().function();
    }
}