5.3.1成员变量和局部变量

来源:互联网 发布:java 获取cst时间 编辑:程序博客网 时间:2024/06/06 16:36

成员变量被分为类变量和实例变量两种。
由于实例并不拥有类变量,因此它访问的并不是这个实例的变量,依然访问的是它所对应的类变量。也就是说,如果通过一个实例修改了类变量的值,由于这个类变量并不属于它,而是属于它所对应的类。因此,修改的依然是类的类变量,与通过该类来修改类变量的结果完全相同。

package chap5_3;class Person{    public String name;    public static int eyeNum;}public class PersonTest {    public static void main(String[] args)    {        System.out.println("Person的eyeNum类变量值:"+Person.eyeNum);        Person p=new Person();        System.out.println("p变量的name变量值:"+p.name+"p对象的eyeNum变量值:"+p.eyeNum);        p.name="孙悟空";        p.eyeNum=2;        System.out.println("p变量的name变量值:"+p.name+"p对象的eyeNum变量值:"+p.eyeNum);        System.out.println("Person的eyeNum类变量值:"+Person.eyeNum);        Person p2=new Person();        System.out.println("p2对象的eyeNum类变量值:"+p2.eyeNum);    }}

运行结果

PersoneyeNum类变量值:0p变量的name变量值:nullp对象的eyeNum变量值:0p变量的name变量值:孙悟空p对象的eyeNum变量值:2PersoneyeNum类变量值:2p2对象的eyeNum类变量值:2

实例也可以访问类变量,同一个类的所有实例访问类变量时,实际上访问的是该类本身的同一个变量,也就是说,访问了同一片内存区。
局部变量根据定义形式的不同,又可以被分为:形参、方法局部变量、代码块局部变量。

package chap5_3;public class BlockTest {    public static void main(String[] args) {        {            int a;            // System.out.println("代码块局部变量a的值:"+a);            a = 5;            System.out.println("代码块局部变量a的值:" + a);        }        //System.out.println(a);    }}

运行结果

代码块局部变量a的值:5
package chap5_3;public class MethodLocalVariableTest {    public static void main(String[] args)    {        int a;//      System.out.println("方法局部变量的值:"+a);        a=5;        System.out.println("方法局部变量的值:"+a);    }}
方法局部变量的值:5

形参的作用域是整个方法体内有效,而且形参也无须显式初始化,形参的值由方法的调用者负责指定。
如果方法里的局部变量和成员变量同名,局部变量会覆盖成员变量,如果需要在这个方法里引用被覆盖掉的成员变量,则可使用this(对于实例变量)或类名(对于类变量)作为调用者来限定访问成员变量。

package chap5_3;public class VariableOverrideTest {    private String name="李刚";    private static double price=78.0;    public static void main(String[] args)    {        int price=65;        System.out.println(price);        System.out.println(new VariableOverrideTest().price);        new VariableOverrideTest().info();    }    public void info()    {        String name="孙悟空";        System.out.println(name);        System.out.println(this.name);    }}

运行结果

6578.0孙悟空李刚
0 0
原创粉丝点击