黑马程序员技术交流社区

标题: 关于this疑惑 [打印本页]

作者: 周海诚    时间: 2012-4-19 23:25
标题: 关于this疑惑
但凡本类功能内部使用了了本类对象,都用this表示。
本类功能内部使用了了本类对象?谁帮忙代码说明下 谢谢

作者: 蒋亮    时间: 2012-4-19 23:43
  1. class PointTest{
  2. private int x;
  3. private int y;
  4. public PointTest(int x,int y){
  5. this.x=x;
  6. this.y=y;
  7. }
  8. public void setX(int x){
  9. this.x=x;
  10. }
  11. public int getX(){
  12. return this.x;
  13. }
  14. public void setY(int y){
  15. this.y=y;
  16. }
  17. public int getY(){
  18. return this.y;
  19. }
  20. }
复制代码

作者: 黑马罗坚    时间: 2012-4-19 23:54

  1. class Test
  2. {
  3.         private int i;
  4.         public static void main(String args[])        
  5.         {
  6.                 Test ts=new Test(1);
  7.                 System.out.println(ts.i);
  8.         }
  9.         public Test(){
  10.                
  11.         }
  12.         public Test(int i){
  13.                 this();
  14.                 this.setI(i);
  15.         }
  16.         public int getI() {
  17.                 return this.i;
  18.         }
  19.         public void setI(int i) {
  20.                 this.i = i;
  21.         }
  22. }

复制代码

作者: 乔建国    时间: 2012-4-19 23:55
当类中某个非静态方法的参数名和类的某个成员变量同名时,为了避免参数作用范围覆盖了成员变量的作用范围,必须明确的使用this关键字来指定。在本类中可以理解为这种格式 :this.成员变量
作者: 乞文超    时间: 2012-4-20 00:03

class Test
{

        private int i;

        public static void main(String args[])        

        {

                Test ts=new Test(1);

                System.out.println(ts.i);

        }

        public Test(){

               
        }

        public Test(int i){

                this();

                this.setI(i);

        }

        public int getI() {

                return this.i;

        }

        public void setI(int i) {

                this.i = i;

        }

}

作者: zhaishuang    时间: 2012-4-20 02:43
本类方法中调用本类成员变量或者其他方法时在名字前都是用this引用的,只不过没必要写。
作者: 朱晓辉    时间: 2012-4-20 08:24
本类功能内部使用了了本类对象的成员时,特别是当本类功能的成员与本类对象的成员名字相同时使用this。
01.class Test
{

private int x;

private int y;

public PointTest(int x,int y)  //此时输入参数的名称与本类对象的成员相同,需要用this指定本类对象的成员。
{

this.x=x;

this.y=y;

}
}




作者: Friends★    时间: 2012-4-20 08:45
this 的详细用法,希望可以帮到你!!
//this 关键字
//作用:用于区分局部变量和成员变量
/*this  为什么可以解决这个问题?
* this  到底代表的是什么?  this就代表本类中的对象,那到底代表哪一个呢?
* this  代表它所在函数所属对象的引用,简单的说,哪个对象在调用this所在的函数,this就代表哪个对象。
*
*
* */

/*this语句的另外一种用法。
*   用于构造函数之间的相互调用,但是有一个条件,必须放在构造函数的第一行        this(name);形式就像
*   上面这样,this和括号之间没有点。
*   举个例子说明。
*   Person(String name){
*        this.name=name;
*   }
*   Person(String name,int age){
*        this.name=name;
*        this.age=age;
*   }
*    这个时候发现,两个构造函数中都有this.name=name,已经重复了,如果按照一般函数的做法就是:
*      Person(String name){
*        this.name=name;
*   }
*   Person(String name,int age){
*        Person(name);//直接调用上面函数的封装体,但是构造函数不行。
*        this.age=age;
*   }
*   但是这样不行,应该这样做。
*   *   Person(String name){
*        this.name=name;
*   }
*   Person(String name,int age){
*         this(name);
*         this.age=age;
*   }
* */
public class Demo {
    public static void main(String[] args) {
             Person p1= new Person(20);
             Person p2= new Person(25);
             boolean  b=p1.compare(p2);
            System.out.println(b);
            //Person p =new Person("zhangsan");   //新产生一个对象的时候,构造函数可以直接调用
             //p.speak();
        }
}



class  Person{
        private  String  name;
        private int age;
       
       
        Person(String name){
                this.name=name;//用于区分局部变量和成员变量。如果这种情况就会有错:
                                 //Person(String name){name=name//这样就没有办法区分了}
                                //this代表的是对象的name,也就是堆内存中的name
        }
       
        Person (int age){
                this.age=age;
        }
        Person(String name,int age){
                this.name=name;
                this.age=age;
               
        }       
        public boolean compare(Person  p)
        {
                return this.age==p.age;//这是的this就相当于p1,因为主函数中p1调用了compare方法,  而这是的p就相当于
                                       //p2,因为主函数中把p2传给了p,所有就相当于p1和p2在比较!
        }
        void speak(){
                System.out.println("name="+name+"age="+age);
        }
       
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2