代码块执行顺序

来源:互联网 发布:怎么改淘宝会员名手机 编辑:程序博客网 时间:2024/06/18 05:59
/*   代码块:     局部代码块:  放在方法中的代码块{}     构造代码块:  类中方法外的代码块{} -----------在构造方法前执行构造代码块     静态代码块:类中方法外的代码块static{} -----------静态代码块走一次,在类加载到内存后就执行 */public class Test1 {    public static void main(String[] args) {        //局部代码块,放在方法中的代码块        {            int a = 1 ;        }        //============================================        Person p1 = new Person();        Person p2 = new Person();        Person p3 = new Person("aa");        /*        ----输出        Person类的静态代码块        Person类的构造代码块        Person无参构造方法        Person类的构造代码块        Person无参构造方法        Person类的构造代码块        Person有参构造方法        */    }}class Person{    static{        System.out.println("Person类的静态代码块");    }    //构造代码块,放在方法之外    //构造代码块(见以下反编译代码)    //构造代码块的本质,复杂到每个构造方法第一行,在super下面    {        System.out.println("Person类的构造代码块");    }    public Person(){        System.out.println("Person无参构造方法");    }    public Person(String name){        System.out.println("Person有参构造方法");    }}

反编译Person.class

package com.itheima.demo09975960014EE378015757548C678490204EE378015757;import java.io.PrintStream;class Person{    public Person()    {        System.out.println("我是 Person类的构造代码块");        System.out.println("Person 无参构造");    }    public Person(String str)    {        System.out.println("我是 Person类的构造代码块");        System.out.println("Person 有参构造");    }    static     {        System.out.println("我是Person类的静态代码块");    }}

继承下代码块的执行顺序

public class Test1 {    public static void main(String[] args) {            Student s1 = new Student();        Student s2 = new Student();        /*         输出:         Person类的静态代码块         Student类的静态代码块         Person类的构造代码块         Person无参构造方法         Student类的构造代码块         Student无参构造方法         Person类的构造代码块         Person无参构造方法         Student类的构造代码块         Student无参构造方法         */    }}class Person {    static {        System.out.println("Person类的静态代码块");    }    // 构造代码块,放在方法之外    {        System.out.println("Person类的构造代码块");    }    public Person() {        System.out.println("Person无参构造方法");    }    public Person(String name) {        System.out.println("Person有参构造方法");    }}class Student extends Person {    // 构造代码块,放在方法之外    {        System.out.println("Student类的构造代码块");    }    public Student() {        System.out.println("Student无参构造方法");    }    static {        System.out.println("Student类的静态代码块");    }}

构造代码块默认放在构造方法下,super下一行