黑马程序员技术交流社区
标题:
菜鸟求问:为什么我的代码运行是这样的?
[打印本页]
作者:
阿秋
时间:
2015-7-14 22:41
标题:
菜鸟求问:为什么我的代码运行是这样的?
class Person
{
String name;
int age;
{
System.out.println("阿秋"); //构造代码块
}
Person()
{
}
Person(String name)
{
this.name=name;
}
Person(String name,int age)
{
this(name); //1.在多个构造函数之前调用重复性很高的东西,用this(name)形式
this.age=age; //2.对于this语句只能定义在构造函数的第一行。
}
public void speak()
{
System.out.println("name是:"+name+",年龄是:"+age);
}
}
class Q1
{
public static void main(String[] args)
{
Person p1=new Person("阿秋",22);
Person p2=new Person("阿秋");
p1.speak();
p2.speak();
//打印结果为:
/*
阿秋
阿秋 ****(这里为第二个对象的构造代码块,但打印优先于第一个对象的构造函数,是这样的吗?)
name是:阿秋,年龄是:22
name是:阿秋,年龄是:0
*/
}
}
作者:
wx_HWRW5aF7
时间:
2015-7-14 23:03
应该是这样
作者:
惜爱上缘
时间:
2015-7-14 23:09
这个执行顺序是对的,构造代码块是在构造函数之前执行的
Person p1=new Person("阿秋",22);
//执行构造代码块,输出第一个"阿秋".你传进去("阿秋",22)这两个值了,但是没有输出
Person p2=new Person("阿秋");
//执行构造代码块,输出第二个"阿秋",穿进去了("阿秋")这个参数,
p1.speak();
//输出第一个对象的speak()
p2.speak();
//输出第二个对象的speak()
作者:
西门雅虎
时间:
2015-7-14 23:13
2楼回答的不错啊
作者:
xyxlx111
时间:
2015-7-14 23:40
写的不错,顶一个
作者:
阿秋
时间:
2015-7-15 20:55
惜爱上缘 发表于 2015-7-14 23:09
这个执行顺序是对的,构造代码块是在构造函数之前执行的
Person p1=new Person("阿秋",22);
//执行构造代码 ...
知道构造代码块优先于构造函数执行,但是没想到优先这么多:loveliness:
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2