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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© amen0205 中级黑马   /  2013-3-3 18:39  /  4997 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 门文通 于 2013-3-4 11:00 编辑

class Person
{
        private String name;
        private int age;
        Person(String name)
        {
                this.name=name;
        }
        Person(String name,int age)
        {
                this(name);
                this.age=age;
        }
}

总感觉 this(name);  这种格式不能能理解,谁能帮我解释下? 谢谢

评分

参与人数 1技术分 +1 收起 理由
高境 + 1 赞一个!

查看全部评分

12 个回复

倒序浏览
this(name);
很容易理解.如果有两个重载函数,一个是一个参数,另一个是两个,直接调用另一个己实现的功能,然后实现重载两个参数的功能.
这一句相当于:
Person(String name)
        {
                this.name=name;
        }
this(name);把第二个构造函数的第一个参数,当作第一个构造函数的形参使用.可能俩个名称都是一样,这个this不是代表调用的对象吗?就如同函数调用一样的.

评分

参与人数 1技术分 +1 收起 理由
高境 + 1 赞一个!

查看全部评分

回复 使用道具 举报
java中this有两种用法:
1、代表当前类
public class Dog{
     private String name;
     private float age;
     public setName(String name){
           this.name = name;
     }
    .......
}
这里的this就代表的当前的这个Dog类。this.name可以理解为dog.name,只是理解,不是等于。
之所以要用this.name = name;这种语法,这是java所提倡的写法,如果你的方法参数与类属性的名称不同,this大可不必要,但是java提倡构造方法参数与类属性名称相同的作法。
2、在构造函数中的使用
public class Dog{
     private String name;
     private int age;
     //有一个参数的构造函数
     public Dog(String name){
          this.name = name;
     }
     public Dog(String name,int age){
           this.name = name;
           this.age = age;
     }
     //这个无参构造方法里调用的有两个参数的构造方法,这个也就是this的第二种用法了!
     public Dog(){
           this("nihao",20);
     }
}

this(参数); 就相当于一个函数。

评分

参与人数 1技术分 +1 收起 理由
高境 + 1 赞一个!

查看全部评分

回复 使用道具 举报
陈圳 发表于 2013-3-3 18:47
this(name);
很容易理解.如果有两个重载函数,一个是一个参数,另一个是两个,直接调用另一个己实现的功能,然 ...

你说的重载函数我了解 , 那是在一个函数中直接调用一个函数。但这里this不是指代函数,而是对象。
回复 使用道具 举报
门文通 发表于 2013-3-3 18:53
你说的重载函数我了解 , 那是在一个函数中直接调用一个函数。但这里this不是指代函数,而是对象。 ...

我上面回复的难道说this不是指对象么...
回复 使用道具 举报
陈圳 发表于 2013-3-3 18:56
我上面回复的难道说this不是指对象么...

我的意思是函数可以这样用,对象也可以吗?  这种形式不是很怪?  可以类比吗
回复 使用道具 举报
本帖最后由 起航 于 2013-3-3 19:27 编辑

其实很简单,这是两个构造方法,并且重载了,参数列表不同。
你问的this(name)其实就是在调用上面的构造方法而已,将name传给person类的一个参数的构造方法而已。
这里的this = 当前对象了,谁调用就是谁了。

举例你在下面主方法中新建了一个对象,person p
你用p.person("zhangsan",20)这时 p就将参数传了第二个构造方法,而第二个构造方法中,又调用了第一个构造方法this(name):这里将张三传给NAME,而p就是引用了new person在内存中的地址值,即可以理解为person的对象,既然建立person的对象了自然就要初始化,所以要用到构造方法,而你只传入了一个NAME所以符合第一个构造方法的参数格式,所以就调用了第一个构造方法初始化。这样说明白了么?
也就是毕老师所说的谁调用俺就是谁  哦了。

评分

参与人数 1技术分 +1 收起 理由
高境 + 1 赞一个!

查看全部评分

回复 使用道具 举报
不怪的...对于新知识我们都只能接受,了解并掌握的.咋能觉得怪呢.这个函数调用的方式和意思你知道,其实这个方式和正常的对象调用方法我感觉是一样的,只不过加了一个通用的使用者代替关键字this.我演示一下:
Person p=new Person()
p这个对象可以用this代替这个你懂的
  public Dog(){
           this("nihao",20);
     }
这里的执行语句this("nihao",20);P使用时不就把this替换成了p对象么.你最不能理解的这句this(name),写明白了就是p(name)这个构造函数也就是在调用第一个构造函数的方法呀.
回复 使用道具 举报
Person类中有两个构造函数,并实现了重载。前面一个构造函数已经this.name=name了,这个属性和下一个重载函数的name属性是一样的。this代表对当前类的引用。this.name就代表了当前类Person的属性name。而由于前面的构造函数已经声名过了。后面的重载函数就只要调用就可以了。
回复 使用道具 举报
小弟知道,希望能帮到楼主,嘻嘻!
this()的一个用法就是在构造函数中调用参数个数等于this的参数个数相同的构造函数 ,this 调用的这个类本身的构造方法,不是超类的构造方法,这个和this的另外一个用法要区分开 ,只有在构造函数中才有这种用法 ,而且不能和super()一起用哟
亲爱滴,求分哟!
回复 使用道具 举报
克零岚 发表于 2013-3-3 20:41
小弟知道,希望能帮到楼主,嘻嘻!
this()的一个用法就是在构造函数中调用参数个数等于this的参数个数相同 ...

真的  分不是我定的 是版主   我知道this在构造函数间调用这种方式记住就行了   OK了
回复 使用道具 举报
其实七楼已经说的比较明白了
class Person
{
        private String name;
        private int age;
        Person(String name)
        {
                this.name=name;
        }
        Person(String name,int age)
        {
                this(name);
                this.age=age;
        }
}
很明显这里的两个构造函数重载了,那么,当你Person p=new Person()产生一个对象时,比如p.person("lisi",18)这时 p就将参数传了第二个构造方法,,那么,在第二个构造方法中,this(name)又调用了第一个构造函数,这时,就会再将lisi传给第一个的name,调用第一个构造函数,完成整个对象的初始化。
希望这么说对你有帮助

评分

参与人数 1技术分 +1 收起 理由
高境 + 1 赞一个!

查看全部评分

回复 使用道具 举报
门文通 发表于 2013-3-3 21:13
真的  分不是我定的 是版主   我知道this在构造函数间调用这种方式记住就行了   OK了 ...

呵呵  我知道
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马