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

相关文章
相关标签/搜索