“ 相信,刷过面试题应该都碰到过不少题,关于类继承后 Java 中静态代码块 / 初始块 / 构造方法的执行顺序问题,往往记一下又忘了,那么,今天来用很少的时间复习一下”面试
package erdan.demo; public class Demo { static { System.out.println("静态代码块 111"); } static { System.out.println("静态代码块 222"); } { System.out.println("初始块 111"); } { System.out.println("初始块 222"); } public Demo() { System.out.println("无参构造方法"); } public Demo(int i) { System.out.println("有参构造方法" + i); } public static void main(String[] args) { new Demo(); } }
输出:函数
静态代码块 111 静态代码块 222 初始块 111 初始块 222 无参构造方法
上图:测试
笔记:初始块(非静态代码块)老是和构造方法是一家子,会一块出现spa
package erdan.demo; public class ChildrenDemo extends Demo{ static { System.out.println("ChildrenDemo:静态代码块 111"); } static { System.out.println("ChildrenDemo:静态代码块 222"); } { System.out.println("ChildrenDemo 初始块 111"); } { System.out.println("ChildrenDemo 初始块 222"); } public ChildrenDemo() { System.out.println("无参构造方法 ChildrenDemo"); } public ChildrenDemo(int i) { System.out.println("有参构造方法 ChildrenDemo:" + i); } public static void main(String[] args) { new ChildrenDemo(); System.out.println("---------------------------------"); new ChildrenDemo(1); } }
输出:code
静态代码块 111 静态代码块 222 ChildrenDemo:静态代码块 111 ChildrenDemo:静态代码块 222 初始块 111 初始块 222 无参构造方法 ChildrenDemo 初始块 111 ChildrenDemo 初始块 222 无参构造方法 ChildrenDemo --------------------------------- 初始块 111 初始块 222 无参构造方法 ChildrenDemo 初始块 111 ChildrenDemo 初始块 222 有参构造方法 ChildrenDemo:1
能够看到下面除了调用有参无参的差异外,虚线下比上面少了静态代码块blog
ps:继承