5.3.1成员变量和局部变量

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

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类变量值:0
p变量的name变量值:nullp对象的eyeNum变量值:0
p变量的name变量值:孙悟空p对象的eyeNum变量值:2
PersoneyeNum类变量值:2
p2对象的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);
    }

}

运行结果

65
78.0
孙悟空
李刚
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值