黑马程序员技术交流社区

标题: 菜鸟:为什么运行有问题呢? [打印本页]

作者: 李志广    时间: 2012-7-1 15:56
标题: 菜鸟:为什么运行有问题呢?
本帖最后由 007lzg 于 2012-7-2 12:06 编辑

class Person
{
        private String name;
        private String age;
        Person(String n)
                {
                name=n;
                }
        Person(String n ,int a)
           {        
                name=n;
                age=a;
                }
        public void speak()
                {
                System.out.println("name="+name+"....age="+age);
                }
}
class PersonDemo3
{
        public static void main(String[] args)
                {
                Person p=new Person("lishi");
                p.speak();
                }
}

显示不兼容类型呢

作者: 周恺    时间: 2012-7-1 16:00
class Person
{
        private String name;
        private String age;//你在初始化的时候已经将age定义为了String类型.建议定义成int,
        Person(String n)
                {
                name=n;
                }
        Person(String n ,int a)//构造函数这里传入一个int类型,
           {        
                name=n;
                age=a;//原来age是String类型的,怎么可以将int类型的数据传给它呢?把第四行的private String age;改为private int age就可以了

                }

作者: Forever。    时间: 2012-7-1 16:01
楼主要细心那 你的age是一个String类型,你传一个int型的东西进来他当然不认识了。
class Person
{
        private String name;
        private String age;
        Person(String n)
                {
                name=n;
                }
        Person(String n ,int a)
           {        
                name=n;
                age=a;
                }
作者: 艾衍年    时间: 2012-7-1 16:21
回复的都能解决问题啊,补充一下,可以用his关键字
  Person(String name)
                 {
                      this.name=name;
                 }
类似的下面的构造函数也可以改一下
改完后是不是更好一些呢
作者: 周刚    时间: 2012-7-1 16:42
楼主调用的是     Person(String n)
                {
                name=n;
                }
传入的只是一个参数name,而没有给age赋值,调用以下函数。当然会报错了!
public void speak()
                {
                System.out.println("name="+name+"....age="+age);
                }
如果age定义为static时,就不会报错。因为就int变量来说static修饰后会默认赋值为0
作者: 邵阳    时间: 2012-7-1 16:43
class Person
{
        private String name;
        private int age;
        Person(String name)
                {
                this.name=name;//为了提高阅读性都叫name,用this关键字作区分,表示对象中的name。
                }
        Person(String name,int age)
           {        
                this.name=name;
               
this.age=age;//这里你构造函数里定义a的类型是int,而成员变量里定义的是String,所以会出现错误。
           //所以要是类型统一,我把你上面的改了
                }
        public void speak()
                {
                System.out.println("name="+name+"....age="+age);//这里name和age其实是省略了this.
                }
}
class PersonDemo3
{
        public static void main(String[] args)
                {
                Person p=new Person("lishi");
                p.speak();
                }
}
另外你的代码有一个最大的缺陷就是阅读性太差,而你知道,代码阅读性是非常重要的。所以我优化了你的代码。
改过的我用颜色标出。

作者: 李志广    时间: 2012-7-2 12:00
谢谢老师和同学的帮助和支持!!!




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