A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 晋一峰 中级黑马   /  2014-8-6 23:03  /  2840 人查看  /  20 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 晋一峰 于 2014-8-6 23:26 编辑

public class Cygnus{
    static int value = 9;   
    public static void main(String[] args) throws Exception{
        new Cygnus().printValue();
    }

    private void printValue(){
        int value = 69;
        System.out.println(this.value);
    }
}
程序的 运行结果为什么是 9  而不是 69呢?
static声明的  成员变量有什么特点??

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 淡定

查看全部评分

20 个回复

正序浏览
这个问题和Static无关吧,有没有Static都一样
回复 使用道具 举报
F@C 中级黑马 2014-8-8 14:44:47
18#
进来学习
回复 使用道具 举报
printValue函数中的value是函数自己的局部变量,但是你打印的是this.value,打印的是类变量,所以是9.static声明的变量是静态的,你这个变量可以用类名直接访问。
回复 使用道具 举报
this.Vaulue代表调用当前类对象的value值,且局部有默认掉局部,而static代表是类所有,用类名.value值就是69了
回复 使用道具 举报
this访问的是你定义的那个静态value,而不是那个成员函数中value....
回复 使用道具 举报
晋一峰 发表于 2014-8-6 23:19
好吧  我想多了- -
看了刚才有个回复 说    this不能访问静态。。。。
但是结果就是  访问先访问了成员变 ...

this.可以访问静态成员
回复 使用道具 举报
this会访问相应方法的变量
回复 使用道具 举报
this 可以看做谁引用就指向谁,this.value可以想做 new Cygnus()的value.
回复 使用道具 举报
this指的是本类,你加了this,打印的当然是9了,不加就是69
回复 使用道具 举报
楼上解释的都不错
回复 使用道具 举报
这个考的不是static的用法吧,这个是this关键字的使用
回复 使用道具 举报
关键还是成员变量和局部变量的区别,this.value是成员变量的值9而不是局部变量value=69.
回复 使用道具 举报
不用this就是69
回复 使用道具 举报
学习了!!!!!
回复 使用道具 举报
如果没有this,你只输出value的话输出是9,当成员变量与局部变量同名时,默认访问局部变量;但是你用了this,this代指调用该方法的对象,this。vlaue就是该对象的value,那就是成员变量
回复 使用道具 举报
this对象指的是当前对象,而当前对象是class Cygnus
回复 使用道具 举报
这个this访问的是你定义的那个静态value,而不是那个成员函数中value....
回复 使用道具 举报
本帖最后由 晋一峰 于 2014-8-6 23:20 编辑
fxwb2005 发表于 2014-8-6 23:10
this是优先访问成员变量的吧……

好吧  我想多了- -
看了刚才有个回复 说    this不能访问静态。。。。
但是结果就是  访问先访问了成员变量啊
回复 使用道具 举报
本帖最后由 fxwb2005 于 2014-8-6 23:12 编辑

this是优先访问成员变量的吧……
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马