黑马程序员技术交流社区
标题:
构造函数初始化
[打印本页]
作者:
2528870651
时间:
2014-3-17 11:37
标题:
构造函数初始化
本帖最后由 2528870651 于 2014-3-17 11:44 编辑
class Person
{
public String name;
public int age;
Person()
{
System.out.println("构造函数运行,新建一个Person对象");
}
Person(String name ,int sge) //age写成了sge怎么,运行时居然没错?????????????????????
{
System.out.println("新建一个Person对象,同时给数据成员初始值");
this.name= name;
this.age = age;
}
public void selfIntroduction()
{
//String homeTown="湖北省武汉市";
System.out.println("姓名:"+name);
System.out.println("年龄:"+age);
//System.out.println("家乡:"+homeTown);
}
}
class PersonDemo
{
public static void main(String[] args)
{
Person p= new Person("lisi",4); //用new实例化一个对象的同时,系统自动调用该函数的构造方法将新对象初始化。
//p.name="李四";
//p.age=24;
p.selfIntroduction();
//new Person("张三",2); //匿名对象只调用一次,所以只做了初始化动作
new Person().selfIntroduction();
}
}
复制代码
C:\Users\dingtan\Desktop
捕获.PNG
(5.06 KB, 下载次数: 19)
下载附件
2014-3-17 11:43 上传
作者:
上官睿鹏
时间:
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
Person(String name ,int sge) //age写成了sge怎么,运行时居然没错?????????????????????
{
System.out.println("新建一个Person对象,同时给数据成员初始值");
this.name= name;
this.age = age; //可是这里是把age传给对象的age, 这里不是sge,而是age,你确定没问题吗??
}
复制代码
作者:
焚雨成灰
时间:
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