java變量做用域Scope

1、變量Scope

做用域同時決定了它的「可見性」以及「存在時間」。在C,C++和Java裏,做用域是由花括號的位置決定的。變量的做用域分爲四個級別:類級、對象實例級、方法級、塊級。c++

 

2、類級Scope

類級變量又稱全局級變量或靜態變量,須要使用static關鍵字修飾。類級變量在類定義後就已經存在,佔用內存空間,能夠經過類名來訪問,不須要實例化。spa

package testdemo;
/**
 *
 * @author MK
 */
public class TestDemo {

    //類變量
    public static int classVariable;

}

 

3、對象實例級Scope

對象實例級變量就是成員變量,實例化後纔會分配內存空間,才能訪問。code

package testdemo;
/**
 *
 * @author MK
 */
public class TestDemo {

    //實例變量
    public int instanceVariable;

}

 

4、方法級Scope

方法級變量就是在方法內部定義的變量,就是局部變量。對象

package testdemo;
/**
 *
 * @author MK
 */
public class TestDemo {

    /**
     * 靜態方法
     */
    public static void staticMethod() {
        int localVariable=0;
    }
    /**
     * 實例方法
     */
    public  void instanceMethod() {
        int localVariable=0;
    }
}

 

5、塊級Scope

塊級變量就是定義在一個塊內部的變量,變量的生存週期就是這個塊,出了這個塊就消失了,好比 if、for、while 語句的塊。塊是指由大括號包圍的代碼。blog

package testdemo;

/**
 *
 * @author MK
 */
public class TestDemo {

    /**
     * 實例代碼塊
     */
    {
        int localVariable = 0;
    }

    /**
     * 靜態代碼塊
     */
    static {
        int localVariable = 0;
    }

    /**
     * 靜態方法
     */
    public static void staticMethod() {
        {
            int localVariable = 0;
        }
    }

    /**
     * 實例方法
     */
    public void instanceMethod() {
        if (12 > 0) {
            int localVariable = 0;
        }
    }
}

 

注意:

一、正確

package testdemo;

/**
 *
 * @author MK
 */
public class TestDemo {

    int variable=0;
    /**
     * 實例方法
     */
    public void instanceMethod() {
        
      int variable = 0;
        
    }
}

 

二、正確

package testdemo;

/**
 *
 * @author MK
 */
public class TestDemo {

    int variable=0;
    /**
     * 實例方法
     */
    public void instanceMethod() {
         {
            int variable = 0;
        }
    }
}

 

三、錯誤,兩個局部變量做用域相交,這與c/c++的局部變量隱藏不同

package testdemo;

/**
 *
 * @author MK
 */
public class TestDemo {

    int variable=0;
    /**
     * 實例方法
     */
    public void instanceMethod() {
        
      int variable = 0;
      {
          int variable = 0;//錯誤
      }  
    }
}

 

四、正確

package testdemo;

/**
 *
 * @author MK
 */
public class TestDemo {

    int variable=0;
    /**
     * 實例方法
     */
    public void instanceMethod() {
        
     
      {
          int variable = 0;
      } 
      
       int variable = 0;
    }
}

 

總結:

(1)在同一做用域範圍的包裹下成員變量名和局部變量名是能夠變量名相同的。內存

(2)在同一個做用域範圍的包裹下局部變量和局部變量不能夠變量名相同(做用域內不能重複命名)。作用域

(3)在方法中使用變量的時候若是不指明使用成員變量仍是局部變量,那麼默認的就是使用局部的那個變量,可是若是局部變量超出了它自己的做用域範圍則會失效,被JVM垃圾回收,那麼則能夠重複命名此變量,並使用最新定義的這個局部變量。class

相關文章
相關標籤/搜索