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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 朱东方 中级黑马   /  2012-7-3 01:45  /  1881 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 朱东方 于 2012-7-4 22:47 编辑

class Person
{
        private String name;
        private int age;
        /*
        person(String name)//输出为name=null
        {
                name = name;
        }
        */

        person(String n)//输出为name=lisi
        {
                name = n;
        }
        person(String n, int a)
        {
                name = n;
                age = a;
        }

        public void speak()
        {
                System.out.println("name="+name"....age="+age);
        }

}

class personDemo
{
        public static void main(String[] args)
        {
                Person p = new Person("lisi");
                p.speak();
        }
}

谁能帮我详细的解释下lisi的传递问题。有点懵呢。

7 个回复

倒序浏览
class Person
{
        private String name;
        private int age;
        /*
       Person(String name)//输出为name=null
        {
                name = name;
        }
        */

        Person(String n)//输出为name=lisi
        {
                name = n;
        }
       Person(String n, int a)
        {
                name = n;
                age = a;
        }

        public void speak()
        {
                System.out.println("name="+name+"....age="+age);
        }

}

class personDemo
{
        public static void main(String[] args)
        {
                Person p = new Person("lisi");
                p.speak();
        }
}

楼主代码错误有很多:我用红颜色标出,并且帮你改正。
1:构造函数应该与类名一致,你的person那个p小写啦。
2:你忘写了一个+号。
然后根据改过之后的我给解答。
1:如果用
Person(String name)//输出为name=null
        {
                name = name;
        }
成员变量也是name,构造函数里面的变量也是name。此时name = name;两个name就代表构造函数里面的变量,与成员变量无关,这里面的两个name都是代表传入的数,比如传入9,就相当于9=9。没有给对象中的name赋值,成员变量的默认值String是null。如果要能够使传递给成员变量name。name前加this.就表示成员变量name。
Person(String name)//输出为name=null
        {
                this.name = name;
        }
2:Person(String n)//输出为name=lisi
        {
                name = n;
        }
这个很容易看,name代表成员变量,而n代表传入的数,因为他们名称不同,name就不需要加this.。给n传lisi就传给了成员变量name。打印出的自然是lisi。

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
哥们啊  ,我说你构造方法的的首字母怎么不大写呢?
,大哥麻烦你问问题有点诚意行不,编译都不编译就直接扔上来
还有这的   System.out.println("name="+name"....age="+age);还少了个加号,
回复 使用道具 举报
yufeiant 发表于 2012-7-3 02:00
哥们啊  ,我说你构造方法的的首字母怎么不大写呢?
,大哥麻烦你问问题有点诚意行不,编译都不编译就直接 ...

我问的问题和编译通过与否有什么关系,这只是随便弄的,不过我记下了。呵呵

看重点。。。
回复 使用道具 举报
个人观点:
1.person(String name)
理解为person(String lisi)中name=name是本类中的name(name初始为null)所以可以解释为name=null,并没有用到传进来的那个lisi即this.name
2.person(String n)
person(String lisi)中n=lisi,是本类中的name(name初始为null)所以可以解释为name=lisi,speak中调用本类中的name输出就是lisi了
回复 使用道具 举报
Person p = new Person("lisi");  这句的意思是创建变量名为P的Person对象,而创建对象需要Person类中的构造方法。由于你的括号里传了个“lisi”,所以是去Person类中去找参数为String类型的构造函数,于是,“lisi”给了n,n又赋值给了name,就是这么个流程啊。
回复 使用道具 举报
class Person
{
        private String name;
        private int age;
        /*
        person(String name)//输出为name=null
        {
                name = name;//因为这里你的参数name和要赋的name一样,所以它会默认的把name赋给本方法中的name也就
        }     //是自身的name,所以名字相同时应该在前面的name前加上this.来表示把参数赋给对象
        */
        Person(String n)//输出为name=lisi
        {
                name = n;//把n的值lisi赋给name
        }
        Person(String n, int a)
        {
                name = n;
                age = a;
        }
        public void speak()
        {
                System.out.println("name="+name+"....age="+age);
        }
}
class PersonDemo
{
        public static void main(String[] args)
        {
                Person p = new Person("lisi");//这里new一个Person类的对象,Person中两个构造函数重载,程序会根据
          //参数自动选择,因为你new的时候初始化了name所以选择了Person(string n)
                p.speak();
        }
}
回复 使用道具 举报
邵阳 发表于 2012-7-3 09:04
class Person
{
        private String name;

嗯,自学呢,很多方面都没注意到,所以错误很多。写的很详细。谢谢啦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马