当前位置:编程学习 > JAVA >>

Java中的this 关键字的问题

看了一段程序就感觉有些疑惑了。。。
class Text {
public static void main(String[] args){
Person q=new Person(3);
Person w=new Person(2);
System.out.print(q.getAge());
System.out.println(w.getAge());
}
}
class Person{
private int age;
void setAge(int age){
this.age=age;
}
  int getAge(){
return age;
}
Person(int age){
this.setAge(age);//加不加this 结果都一样额
}
}

看到好多Java教材上都这么用this,我就搞不懂这个地方为什么要加this呢 --------------------编程问答-------------------- this代表这个类生成的对象。比如一个类C,他有两个实例(对象)A、B。那个类中定义的this就代表A、B这两个实例。 --------------------编程问答-------------------- 个人理解,this代表当前对象 --------------------编程问答-------------------- this. 智能提示多爽 --------------------编程问答--------------------
引用 3 楼 zk3389 的回复:
this. 智能提示多爽


神回复,,,赞一个 --------------------编程问答-------------------- 楼主这代码,加不加this都一样,this指当前对象。

"this."用起来比较方便,手写容易出错。 --------------------编程问答--------------------
引用 5 楼 u011935764 的回复:
楼主这代码,加不加this都一样,this指当前对象。

"this."用起来比较方便,手写容易出错。
this是指当前对象,但lz的this.age=age;这行中this不能省略的,由于作用域的不同,在用的时候不加this,默认使用作用域小的。
要是不加:
    age = age;类的成员变量age就只是类加载时,由jvm初始化的0,所以打印的结果就是0。
加的话:
    this.age = age;就是把参数age复制给成员变量覆盖jvm初始化的0,所以打印结果为23.

也就是说:
this一方面起到提示的作用,另一方面是划分作用域的作用 --------------------编程问答--------------------
引用 6 楼 u011213572 的回复:
"this."用起来比较方便,手写容易出错。
this是指当前对象,但lz的this.age=age;这行中this不能省略的,由于作用域的不同,在用的时候不加this,默认使用作用域小的。
要是不加:
    age = age;类的成员变量age就只是类加载时,由jvm初始化的0,所以打印的结果就是0。
加的话:
    this.age = age;就是把参数age复制给成员变量覆盖jvm初始化的0,所以打印结果为23.

也就是说:
this一方面起到提示的作用,另一方面是划分作用域的作用
--------------------编程问答--------------------
引用 6 楼 u011213572 的回复:
Quote: 引用 5 楼 u011935764 的回复:

楼主这代码,加不加this都一样,this指当前对象。

"this."用起来比较方便,手写容易出错。
this是指当前对象,但lz的this.age=age;这行中this不能省略的,由于作用域的不同,在用的时候不加this,默认使用作用域小的。
要是不加:
    age = age;类的成员变量age就只是类加载时,由jvm初始化的0,所以打印的结果就是0。
加的话:
    this.age = age;就是把参数age复制给成员变量覆盖jvm初始化的0,所以打印结果为23.

也就是说:
this一方面起到提示的作用,另一方面是划分作用域的作用

厉害 --------------------编程问答--------------------
引用 6 楼 u011213572 的回复:
Quote: 引用 5 楼 u011935764 的回复:

楼主这代码,加不加this都一样,this指当前对象。

"this."用起来比较方便,手写容易出错。
this是指当前对象,但lz的this.age=age;这行中this不能省略的,由于作用域的不同,在用的时候不加this,默认使用作用域小的。
要是不加:
    age = age;类的成员变量age就只是类加载时,由jvm初始化的0,所以打印的结果就是0。
加的话:
    this.age = age;就是把参数age复制给成员变量覆盖jvm初始化的0,所以打印结果为23.

也就是说:
this一方面起到提示的作用,另一方面是划分作用域的作用


然后。。。写代码的时候在this加与不加都正确的情况下,我们是加this还是不加this呢 --------------------编程问答--------------------
引用 9 楼 u012836069 的回复:
Quote: 引用 6 楼 u011213572 的回复:

Quote: 引用 5 楼 u011935764 的回复:

楼主这代码,加不加this都一样,this指当前对象。

"this."用起来比较方便,手写容易出错。
this是指当前对象,但lz的this.age=age;这行中this不能省略的,由于作用域的不同,在用的时候不加this,默认使用作用域小的。
要是不加:
    age = age;类的成员变量age就只是类加载时,由jvm初始化的0,所以打印的结果就是0。
加的话:
    this.age = age;就是把参数age复制给成员变量覆盖jvm初始化的0,所以打印结果为23.

也就是说:
this一方面起到提示的作用,另一方面是划分作用域的作用


然后。。。写代码的时候在this加与不加都正确的情况下,我们是加this还是不加this呢
为防止手动写错,最好加上(当然这个看个人习惯) --------------------编程问答--------------------
引用 2 楼 wxinixw 的回复:
个人理解,this代表当前对象
 笑了 --------------------编程问答-------------------- 呵呵,曾经也有这样的疑问,以前我写代码能加 this 都加 this,现在我写代码能不加 this 就不加 this,记得有一个代码规范,不知道在哪里看到的,像这里的 this 是多余的,多余的东西最好不要写。 --------------------编程问答--------------------
引用 12 楼 zssazrael 的回复:
呵呵,曾经也有这样的疑问,以前我写代码能加 this 都加 this,现在我写代码能不加 this 就不加 this,记得有一个代码规范,不知道在哪里看到的,像这里的 this 是多余的,多余的东西最好不要写。
高手本来都不加的 --------------------编程问答--------------------

void setAge(int age){
        this.age=age;
 }//这里如果不加就不行了, 所以一般自动生成的代码,或者习惯都用this, 并且有提示啊,哈哈
--------------------编程问答-------------------- 有些地方可以必须加this有些地方可以不用加.但为了方便和代码的规范性最好都加上this --------------------编程问答-------------------- 你这种情况.可加可不加. --------------------编程问答--------------------  this 代表当前类的对象 ,为了方便点标 --------------------编程问答-------------------- 在构造方法中有些是必须加this的,有些不需要加的最好加上方便,习惯问题。
Person(int age){
        this.age=age;
    }
这里不加this,age=age;是给局部变量age赋值了,属于java中的就近原则,成员变量age调用的时候没有赋值。 --------------------编程问答--------------------
引用 3 楼 zk3389 的回复:
this. 智能提示多爽
神回复,长见识了!this.age表示你前面定义的全局变量。不加this,age=age表示把传入的参数自己给自己付了一次值,全局变量age未被赋值。 --------------------编程问答-------------------- 加了不是更加清晰吗?表示这个age不是形参的age --------------------编程问答-------------------- 你的问题是问俩个this的区别吗?
第一个this必须加,它这么写的this.age = age;表示本对象的字段等于参数,如果不加,系统理解为参数等于参数,和这个对象的字段就扯不上关系了。
第二个this可以不加,自己感觉看个人习惯了。。。。 --------------------编程问答-------------------- this代表当前类的引用。在方法中,哪个对象调用方法,this就代表谁。 --------------------编程问答-------------------- 通俗的说,this就是指你当前正在被创建的这个对象,你传进来的age的值就是要赋予正在被创建的这个对象的age,这样将我相信你要好理解一点 --------------------编程问答-------------------- 可加可不加的情况下,加与不加是个人的风格;
老加的人求的是一种稳妥 --------------------编程问答-------------------- 楼上正解 ~~~~~~~~~ --------------------编程问答-------------------- 不要加,明显是多余的东西,为何要加? --------------------编程问答--------------------
引用 22 楼 x7cxymengyu 的回复:
this代表当前类的引用。在方法中,哪个对象调用方法,this就代表谁。


同意 --------------------编程问答--------------------
引用 6 楼 u011213572 的回复:
Quote: 引用 5 楼 u011935764 的回复:

楼主这代码,加不加this都一样,this指当前对象。

"this."用起来比较方便,手写容易出错。
this是指当前对象,但lz的this.age=age;这行中this不能省略的,由于作用域的不同,在用的时候不加this,默认使用作用域小的。
要是不加:
    age = age;类的成员变量age就只是类加载时,由jvm初始化的0,所以打印的结果就是0。
加的话:
    this.age = age;就是把参数age复制给成员变量覆盖jvm初始化的0,所以打印结果为23.

也就是说:
this一方面起到提示的作用,另一方面是划分作用域的作用

他说的是第13行 --------------------编程问答--------------------
引用 6 楼 u011213572 的回复:
Quote: 引用 5 楼 u011935764 的回复:

楼主这代码,加不加this都一样,this指当前对象。

"this."用起来比较方便,手写容易出错。
this是指当前对象,但lz的this.age=age;这行中this不能省略的,由于作用域的不同,在用的时候不加this,默认使用作用域小的。
要是不加:
    age = age;类的成员变量age就只是类加载时,由jvm初始化的0,所以打印的结果就是0。
加的话:
    this.age = age;就是把参数age复制给成员变量覆盖jvm初始化的0,所以打印结果为23.

也就是说:
this一方面起到提示的作用,另一方面是划分作用域的作用

楼主说的是第18行 --------------------编程问答-------------------- this 就是我的。 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 12行的this必须加,因为11行传入的形参是age,age和Person类中的成员变量age名字相同,12行必须加this特指是Person类中的age,否则java编译器会以就近原则而忽略了成员变量中的age。楼主如果是在eclipse中调试,去掉this和加上this去点击形参中的age就会发现变灰的区域不一样。没有this,12行的两个age变灰了,意思是他们是一样的;加上this,会发现10行和12行的age变灰了。
18行的this加不加都无所谓,加了有智能提示。倒也是,记得某培训学校的老师说:你们知道为什么网上有很多人写代码要在这里加this么?然后他就用eclipse演示下敲个this.,弹出了提示,然后就笑了。。
具体加不加看项目组如何规定吧。 --------------------编程问答-------------------- 当名字想同时,你不用this,怎么区分两个不同对象的属性呢?你age = age.编译器可没那么聪明,它可不知道,分别代表什么。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,