在创建一个对象时,会调用构造方法外还会执行其他区块的语句,例如静态块、构造块。
执行顺序——静态块 -- main() -- 构造块 -- 构造方法
静态块在类加载时执行一次,之后便不再执行。可以在对类进行初始化,也可以实例化对象调用方法。但不能使用this、super等关键词,因为此时并没有实例化的对象(除非你实例化一个对象,在调用方法,但还是不能使用this、super)。
当有多个静态块时,按照先后顺序执行。
当有子类继承时的执行循序(这里这篇文章写的挺好的,就没再自己写了)
父类静态 -- 子类静态 -- 父类构造代码块 -- 父类构造函数 -- 子类构造代码块 -- 子类构造函数
我常忘记子类静态执行的循序!!!
对于父类中的的静态内部类只要不实例化内部类并不会执行内部类中的各个区块(即便是实例化了父类的对象也不会执行,除非父类的区块中有内部类的实例化语句)。
参考 java构造块与静态块
原文:https://www.cnblogs.com/pong137/p/13681736.html