免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1566 | 回复: 9
打印 上一主题 下一主题

[问题]对this的用法不是很理解列举一例 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-02-11 16:54 |只看该作者 |倒序浏览
下面这段代码的运行结果是:
变量a的值:5
变量b的值:10
我把第17、18行中“this.a”和“this.b”中的this去掉,运行结果还是一样的。请问this存在的作用到底是什么?


public  class PrivateDemo
{
        public int a;
        private int b;
        public int getA()
        {
                return a;
        }
        //私有类型的成员方法
        private int getB()
        {
                return b;
    }
       //构造方法
        public PrivateDemo(int a,int b)
        {
                this.a = a;
                this.b = b;
        }
        public static void main(String args[])
        {
                PrivateDemo  one = new PrivateDemo(5,10);
      //访问公共类型的成员方法
                int a = one.getA();
                System.out.println("变量a的值:"+a);
      //访问私有类型的成员方法
       int b = one.getB();
                System.out.println("变量b的值:"+b);
        }
}

论坛徽章:
0
2 [报告]
发表于 2006-02-11 20:39 |只看该作者
this表示当前类,在这个例子中也就是代表PrivateDemo
这里是可以不用this,用this只是说明这个变量是这个类的成员,是个全局变量
在这个例子中如果你不用this,程序就变得不清晰,a=a,让人难理解!

论坛徽章:
0
3 [报告]
发表于 2006-02-11 21:44 |只看该作者
结果真的一样吗?

论坛徽章:
0
4 [报告]
发表于 2006-02-12 03:10 |只看该作者
结果怎么会一样呢?
先来说变量的作用域,在public PrivateDemo(int a,int b){}这个构造方法里面a和b是两个局部变量,他们的名字隐藏了该PrivateDemo类的成员变量int a和int b,此时需要使用this.a和this.b来表明使用的是成员变量a和b,如果不这样用的话,直接使用a和b那么编译器会当作局部变量a和b(也就是形参)来给复制,而成员变量a和b默认初始化是0,0

强烈怀疑楼主改了源代码没有重新编译

再说下this,一楼说的不对的,this是指当前对象而不是指当前类,这个是有本质区别的,成员变量和成员方法是在对象生成的时候才被创建和初始化的,而类则在加载的时候就有了.这个用文字好象不太容易说明白,具体到你这段代码,这个this可以认为是最后new出来那个对象one

论坛徽章:
0
5 [报告]
发表于 2006-02-12 04:57 |只看该作者
You must use the this reference here, since those parameters, a and b, have the same
names as PrivateDemo's fields.  If you just simply wrote a=a, you would assign the value of
the "a" parameter to itself, not to the "a" field.  The expression this.a refers to the object's a
field, not the "a" parameter of PrivateDemo, "b" likewise.

论坛徽章:
0
6 [报告]
发表于 2006-02-12 13:26 |只看该作者
每次看到zxll, 我就想起perryhg

论坛徽章:
0
7 [报告]
发表于 2006-02-12 15:11 |只看该作者
斗胆猜一下:楼主会不会是忘了重新编译~~~

论坛徽章:
0
8 [报告]
发表于 2006-02-16 19:33 |只看该作者

To:各层居民

各位大虾,不好意思,我贴错了代码,下面这段代码运行结果和原来一样,确实我编译的是下面这个:

//PrivateDemo.java
public  class PrivateDemo_mod
{
        public int a;
        private int b;
        public int getA()
        {
                return a;
        }
        //私有类型的成员方法
        private int getB()
        {
                return b;
           }
       //构造方法
        public PrivateDemo_mod(int a1,int b1)
        {
                a = a1;
                b = b1;
        }
        public static void main(String args[])
        {
                PrivateDemo_mod  one = new PrivateDemo_mod(5,10);
      //访问公共类型的成员方法
                int a = one.getA();
                System.out.println("变量a的值:"+a);
      //访问私有类型的成员方法
       int b = one.getB();
                System.out.println("变量b的值:"+b);
        }
}

论坛徽章:
0
9 [报告]
发表于 2006-02-17 08:43 |只看该作者
原帖由 艾斯尼勒 于 2006-2-12 03:10 发表
结果怎么会一样呢?
先来说变量的作用域,在public PrivateDemo(int a,int b){}这个构造方法里面a和b是两个局部变量,他们的名字隐藏了该PrivateDemo类的成员变量int a和int b,此时需要使用this.a和this.b来表明使用 ...




论坛徽章:
0
10 [报告]
发表于 2006-02-17 11:44 |只看该作者

回复 9楼 cjcameron 的帖子

呵呵,这样a=a1的话,a很明显就指成员a
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP