黑马程序员技术交流社区

标题: 菜鸟求问:为什么我的代码运行是这样的? [打印本页]

作者: 阿秋    时间: 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