Java 类的加载顺序
单个类的加载顺序
静态属性——>静态代码块——>普通属性——>普通代码块——>构造方法
代码:
package top.simba1949; /** * @author simba@onlying.cn * @date 2018/8/1 15:46 * * JAVA 中单个类的初始化顺序 * * JAVA 类中包含以下几项: * 静态属性:static 修饰 * 静态代码块:static {} * 普通属性: * 普通方法块:{} * 构造方法: * 普通方法 */ public class JavaLoadOrder { /** * 静态属性:static 修饰 */ private static String staticField = getStaticFieldValue(); static String getStaticFieldValue(){ System.out.println("静态属性初始化"); return "静态属性"; } /** * 普通属性: */ private String field = getFieldValue(); String getFieldValue(){ System.out.println("普通属性初始化"); return "普通属性"; } /** * 静态代码块:static {} */ static { System.out.println("静态代码块"); } /** * 普通方法块:{} */ { System.out.println("普通代码块"); } public JavaLoadOrder() { System.out.println("构造方法"); } public void method(){ System.out.println("普通方法"); } public static void main(String[] args) { new JavaLoadOrder(); } }
结果如图:
子类继承父类的加载顺序
父类静态属性——>父类静态代码块——>子类静态属性——>子类静态代码块
——>父类普通属性——>父类普通代码块——>父类构造方法
——>子类普通属性——>子类普通代码块——>子类构造方法
代码:
子类代码
package top.simba1949; /** * @author simba@onlying.cn * @date 2018/8/1 16:10 * JAVA 类中包含以下几项: * 静态属性:static 修饰 * 静态代码块:static {} * 普通属性: * 普通方法块:{} * 构造方法: * 普通方法 */ public class JavaLoadOrderExtendClass extends JavaLoadOrderParentClass{ private static String staticField = getStaticFieldValue(); private static String getStaticFieldValue() { System.out.println("静态属性"); return "静态属性"; } private String field = getFieldValue(); private String getFieldValue() { System.out.println("普通属性"); return "普通属性"; } static { System.out.println("静态代码块"); } { System.out.println("普通代码块"); } public JavaLoadOrderExtendClass() { super(); System.out.println("构造方法"); } public static void main(String[] args) { new JavaLoadOrderExtendClass(); } }
父类代码
package top.simba1949; /** * @author simba@onlying.cn * @date 2018/8/1 16:11 */ public class JavaLoadOrderParentClass { private static String classStaticField = getClassStaticFieldValue(); private static String getClassStaticFieldValue() { System.out.println("父类 静态属性"); return "父类 静态属性"; } private String field = getClassFieldValue(); private String getClassFieldValue() { System.out.println("父类 普通属性"); return "父类 普通属性"; } static { System.out.println("父类 静态代码块"); } { System.out.println("父类 普通代码块"); } public JavaLoadOrderParentClass() { System.out.println("父类 构造方法"); } }
结果如图: