静态代码块,普通代码块 , 构造方法 , 代码执行的先后顺序.

代码如下

package com.coderman.nowcoder.java1;

/**
 * @Author zhangyukang
 * @Date 2020/5/30 09:52
 * @Version 1.0
 **/
public class StaticSeqTest {
    {
        System.out.println("999999");
    }
    static {
        System.out.println("888888");
    }
    public static void main(String[] args) {
        //先加载StaticSeqTest 的class 对象 静态代码块先行 8 
        System.out.println("777777");
        Son son = new Son();//1. 先加载父类的Class 后 加载子类的 Class , 后实例化: 先实例化父类, 后实例化子类
        // 3 6 2 a 1 5 b 4
        System.out.println("=================");
        Son son1 = new Son();
        //2 a 1 5 b 4
        System.out.println("=================");
        Father father = new Father();
        // 2 a 1
    }
}

class Father {
    public Father() {
        System.out.println("111111");
    }

    {
        System.out.println("222222");
    }

    static {
        System.out.println("333333");
    }
    {
        System.out.println("aaaaaa");
    }
}
class Son extends Father{
    public Son(){
        System.out.println("444444");
    }
    {
        System.out.println("555555");
    }
    static {
        System.out.println("666666");
    }
    {
        System.out.println("bbbbbb");
    }
}

运行结果

888888
777777
333333
666666
222222
aaaaaa
111111
555555
bbbbbb
444444
=================
222222
aaaaaa
111111
555555
bbbbbb
444444
=================
222222
aaaaaa
111111

总结

  1. new 一个对象,可以分为两个过程, 创建 class对象(方法), 创建实例对象(方法)
  2. 创建class对象的时候,如果有继承关系, 先创建父类的class对象,后创建子类的class 对象
  3. 创建class对象的时候,会加载类中的静态代码块, 执行顺序和代码顺序一致
  4. 创建实例对象时候, 如果有继承关系, 先实例化父类对象, 后实例化子类对象
  5. 创建实例对象时候, 会执行类中的普通代码块,执行顺序规则同上,然后执行构造方法

简而言之:

执行顺序

静态代码块> 普通代码块 > 构造方法

# Java  

评论

公众号:mumuser

企鹅群:932154986

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×