黑马程序员技术交流社区

标题: 一直在用,忽然有点想不通,大家看一看。 [打印本页]

作者: 何洪森    时间: 2012-2-7 17:16
标题: 一直在用,忽然有点想不通,大家看一看。
本帖最后由 何森 于 2012-2-8 18:12 编辑

定义一个Person类,两个构造方法。
Person(String name){
   this.name = name ;
}
Person(String name,int age){
   //this(name);
   Person(name) ;
   this.age = age;
}
编译在Person(name);上面有错误,虽然一直在用this(name),但是如果不用this呢?是不是
因为构造方法中必须用this关键字调用其他的构造方法?
作者: 房宝彬    时间: 2012-2-7 17:19
this 是指 谁调用,就是谁的
作者: 梅雄新    时间: 2012-2-7 17:35
楼主,在一够造方法中调用调用另一构造方法时用this指代调用,够造方法的调有成员的赋值和内存单元的分配
直接使用JVM会将其当做普通方法调用,楼主如果写个同名的public void Person(String name)方法就可以的
以下是我测试的 希望对楼主有帮助
加上普通方法就可以了
public class Person
{        String name;
        int age;
        Person(String name){
           this.name = name ;
        }
        Person(String name,int age){
           //this(name);
           Person(name) ;
           this.age = age;
        }
        public void Person(String a)
        {
                System.out.println(a);
        }
        public static void main(String args[])
        {
                Person p = new Person("似懂非懂");
                Person p2 = new Person("sdf",12);               
               
        }
}
作者: 魏腾飞    时间: 2012-2-7 17:39
简单的做一下还原:
public class Demo{
   public static void main(String[] args){
      Person p = new Person("zhangsan",12);
   }
}
class Person{
    String name;
    int age;
    Person(String name){
        this.name = name ;
        System.out.println("name="+name);
    }
    Person(String name,int age){
   
    this(name);
    //Person(name) ;//初学者根据自己的理解通过构造函数名调用,结果出现错误。
    this.age = age;
    System.out.println("name:"+name+"age:"+age);
   }

}
//在构造函数中调用另外一个函数的构造函数必须使用this(参数列表),而且将该语句写在第一行。

作者: 黑马唐浩    时间: 2012-2-7 18:03
老师说过,当一个构造方法中需要调用另一个构造方法时,
必须使用this。而且这行this(***)必须放在该构造方法的第一行。

作者: 李泽霖    时间: 2012-2-7 18:11
this为一系统资源,只允许用户读而不允许写,它存放当前对象的地址(引用)。

    this变量有以下作用:

    1. 构造方法重用:

    public class Rectangle{
        public Rectangle(Location at, Shape size) {…}
                public Rectangle(Shape size,Location at){
                                   this(at, size); }
        public Rectangle(Location at) {
       this(at, new Shape(100,100));
        }
        public Rectangle(Shape size) {
       this(size, new Location(1,1));
        }
        public Rectangle() {
       this(new Location(1,1), new Shape(100,100));
        }
    }

    2、消除歧义:

    Location{
    private int x;
    private int y;
    public Location(int x,int y)   {
       this.x=x;
       this.y=y;
    }
    ……
    }

    3、返回对象-链式方法调用:

    public class Count {
    private int i = 0;
       Count increment() {
       i++;
       return this; //返回对象的地址,所以我们可以链式访问它
       }
        void print() {
       System.out.println("i = " + i);
        }
    }
    public class CountTest{
    public static void main(String[] args) {
       Count x = new Count();
       x.increment().increment().print();
    }
    }

    4、作为参数传递"this”变量-进行回调:

    假设有一个容器类和一个部件类,在容器类的某个方法中要创建部件类的实例对象,而部件类的构造方法要接受一个代表其所在容器的参数。例如:
    class Container
            {
                 Component comp;
                 public void addComponent()
                 {
                      comp = new Component(this); //代表你所创建的对象,因为它要用到.
                 }
            }
            class Component
            {
                 Container myContainer;
                 public Component(Container c)
                 {
                      myContainer = c;
                 }
            }
作者: 最初的理想    时间: 2012-2-7 18:26
因为构造方法中必须用this关键字调用其他的构造方法?是,调用自身构造方法必须用this指代且必须放在第一行。ls说的很详细了




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