本帖最后由 GUI007 于 2012-01-06 17:05:47 编辑

解决方案 »

  1.   

    因为它第一句话调用了另一个构造类,而另一个构造类第一句话是super,所以符合规范。执行顺序如代码调用顺序,没有特殊性。
      

  2.   

    记住 super调用父类的构造方法,而在对象实例的时候同样要调用一次
    Person p1 = new Person("A");
    Person p2 = new Person("B","shanghai");
    Student s1 = new Student("C","s1");
    Student s2 = new Student("C","shanghai","s2");
    这后面new的都是构造方法,而在构造方法里的第一行就是super,有的时候没写super也会调哦!
      

  3.   

    唉,都是答非所问,人家问的是问什么在
    Student(String name, String school){
            this(name,"beijing",school);
        }
    这个构造函数中没有调用父类的构造函数。因为第一个构造函数用了this();调用了自己的第二个 Student(String n, String l,String school)构造方法,而这个构造方法中有super()方法。所以在第一个构造函数就不用写super();方法了。
    java规定this()与super(),都必须写在构造函数的第一行,所以在创建构造函数时两者只能出现一个,也只需要出现一个!
      

  4.   

    this()和super()都必须写第一行且只能写一个
    不写的时候子类默认有super()调父类空的构造方法
    如果父类没有空的构造方法就不调
      

  5.   

    this只能调用本类中的构造方法
      

  6.   

      这个问题java规定this()与super(),都必须写在构造函数的第一行,那么要么只能写this() 要么super(),那如我提的问题,写的是this() 这样不是先执行了子类的构造方法了么?
      

  7.   

    调用子类之前,调用父类构造函数是为了完成初始化父类的信息。而你现在通过this调用子类的另外一个,仍旧是完成了对父类的初始化。像调用父类构造函数和本身的其他构造函数的时候,都要求在构造函数的第一行进行引入,其它的地方会报错的。需要了解的几个点:
    1. 如果没有类没有显示的声明构造函数,那么它会有一个默认的构造函数。
    2. 子类可以显示的执行父类构造函数,如果没有显示调用,JVM会自动执行其没有参数的构造函数,当然如果你父类的没有不带参数的构造函数,那么就会出现错误了。
    // 简单的一个例子,参考class Person {
    // 默认的构造函数
    public Person() { 
    }
    // 自定义的构造函数
    public Person(String name) {

    }
    }class Student extends Person {
    // 构造函数1
    public Student() {
    // super("test"); // 如果父类的默认构造函数不存在,则必须显示的调用父类构造函数
    }
    //构造函数2
    public Student(String name) {
    this();
    System.out.println(name);
    // this(); // 出现错误
    }
    }
      

  8.   

    不管你写多少个this();  到最后始终会有一个super在第一行。意思就是说,不管你怎么写构造函数,那么这些类的构造都要通过父类的构造器。就是构造器的执行顺序从Object--->你具体的类