A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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                                                                                               
*/
        }
}

5 个回复

倒序浏览
应该是这样
回复 使用道具 举报
这个执行顺序是对的,构造代码块是在构造函数之前执行的
Person p1=new Person("阿秋",22);
//执行构造代码块,输出第一个"阿秋".你传进去("阿秋",22)这两个值了,但是没有输出
Person p2=new Person("阿秋");
//执行构造代码块,输出第二个"阿秋",穿进去了("阿秋")这个参数,
p1.speak();
//输出第一个对象的speak()
p2.speak();
//输出第二个对象的speak()
回复 使用道具 举报
2楼回答的不错啊
回复 使用道具 举报
写的不错,顶一个
回复 使用道具 举报
惜爱上缘 发表于 2015-7-14 23:09
这个执行顺序是对的,构造代码块是在构造函数之前执行的
Person p1=new Person("阿秋",22);
//执行构造代码 ...

知道构造代码块优先于构造函数执行,但是没想到优先这么多:loveliness:
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马