黑马程序员技术交流社区

标题: 构造函数初始化 [打印本页]

作者: 2528870651    时间: 2014-3-17 11:37
标题: 构造函数初始化
本帖最后由 2528870651 于 2014-3-17 11:44 编辑
  1. class Person
  2. {
  3.         public String name;
  4.         public int age;
  5.         Person()
  6.         {
  7.                 System.out.println("构造函数运行,新建一个Person对象");
  8.         }
  9.         Person(String name ,int sge)      //age写成了sge怎么,运行时居然没错?????????????????????
  10.         {
  11.                 System.out.println("新建一个Person对象,同时给数据成员初始值");
  12.                 this.name= name;
  13.                 this.age = age;
  14.         }

  15.         public void selfIntroduction()
  16.         {
  17.                 //String homeTown="湖北省武汉市";
  18.                 System.out.println("姓名:"+name);
  19.                 System.out.println("年龄:"+age);
  20.                 //System.out.println("家乡:"+homeTown);
  21.         }
  22. }


  23. class PersonDemo
  24. {
  25.         public static void main(String[] args)
  26.         {
  27.                 Person p= new Person("lisi",4);    //用new实例化一个对象的同时,系统自动调用该函数的构造方法将新对象初始化。
  28.                 //p.name="李四";
  29.                 //p.age=24;
  30.                 p.selfIntroduction();
  31.                 //new Person("张三",2);            //匿名对象只调用一次,所以只做了初始化动作
  32.                 new Person().selfIntroduction();

  33.         }
  34. }
复制代码


C:\Users\dingtan\Desktop

捕获.PNG (5.06 KB, 下载次数: 19)

捕获.PNG

作者: 上官睿鹏    时间: 2014-3-17 11:49
本帖最后由 上官睿鹏 于 2014-3-17 11:54 编辑

没错,int sge是你在构造函数中重新定义的这只是个形参。无论你写成怎样都不会有错的,只要你在里面传值时传的是int类型就可以了

作者: 歌尽繁华    时间: 2014-3-17 11:51
这只是一个形式参数
作者: 焚雨成灰    时间: 2014-3-17 12:54
构造方法中的sge是形式参数,传进去的的确是你输入的年龄,但是构造方法中并未用到sge
this.age = age; 该类中定义age的时候默认值为0,自己默认的0传给自己所以打印出来为0
作者: 李猛    时间: 2014-3-17 13:07
编译不会出错因为你的person类中定义了age,age初始化为零,所以不管你怎么传值,你的age永远是零,因为你的传的值并没有被使用,
作者: 王竞    时间: 2014-3-17 13:50
Person(String name ,int sge)     
        {
                System.out.println("新建一个Person对象,同时给数据成员初始值");
                this.name= name;
                this.age = age;
        }
     你在Person的形式参数中的第二个形参是int sage;这个参数的名字无论你写什么都是没有关系,只要确保参数类型是你所需要的就行,而你的下面的这行代码this.age = age;这里却没有写为this.age = sage;
     这说明你对this这个关键字的了解还不够深入,按照你的写法,这里的额this.age 和 age 都是指的你定义的 public int age;这个变量,你没有为age这个变量赋值,所以编译器在编译运行时会自动给基本数据类型的变量赋值,所以你打印出的结果都是0,
     由于你的错误的写法,导致你在new的时候传递过去的第二个形参的值根本就没有用到,so,you got it?
作者: 2528870651    时间: 2014-3-17 15:34
  1. Person(String name ,int sge)      //age写成了sge怎么,运行时居然没错?????????????????????
  2.         {
  3.                 System.out.println("新建一个Person对象,同时给数据成员初始值");
  4.                 this.name= name;
  5.                 this.age = age;    //可是这里是把age传给对象的age, 这里不是sge,而是age,你确定没问题吗??
  6.         }
复制代码

作者: 焚雨成灰    时间: 2014-3-18 08:06
2528870651 发表于 2014-3-17 15:34

this.age = this.age;有没有问题
另外int add(int a, int b, int c)
{
   return a+b;//不用c也没有问题
}
作者: 2528870651    时间: 2014-3-18 10:13
谢谢焚雨成灰  , 李猛 ,  王竟的回答。我就纳闷为什么总是打印0,现在知道了。
谢谢各位大神的回答啊 !!
小弟看书去了!




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