//主函数 package com.java.CarRent; public class Initial { public static void main(String[] args) { Son s=new Son(); } } //Parent 类 package com.java.CarRent; public class Parent { { System.out.println("A"); } static{ System.out.println("B"); } public Parent(){ System.out.println("C"); } } //Son 类 package com.java.CarRent; public class Son extends Parent{ { System.out.println("D"); } static{ System.out.println("E"); } public Son(){ System.out.println("F"); } } //能不能解释一下答案 ,关键是其中的static初始化没理解
在一个不存在继承的类中:初始化static变量,执行static初始化快-->初始化普通成员变量(如果有赋值语句),执行普通初始化块-->构造方法
在一个存在继承的类中:初始化父类static成员变量,运行父类static初始化块-->初始化子类static成员变量,运行子类static初始化块-->初始化父类实例成员变量(如果有赋值语句),执行父类普通初始化块-->父类构造方法-->初始化子类实例成员变量(如果有赋值语句)及普通初始化块-->子类构造方法。
注意:其中变量初始化(赋值)和初始化块的执行与相关语句在源码中的放置顺序一致,不过变量声明会最先执行
不懂的{}这个的,再补充下刚弄懂
static{...}是静态块,而只有{...}的是叫做构造块。
静态块在一个程序里面只执行一次;
而构造块是,只要建立一个对象,构造代码块都会执行一次。
静态块优先于主方法的执行,静态块优先于构造快,然后是构造方法的执行,而且只执行一次!