本文共 2569 字,大约阅读时间需要 8 分钟。
类的加载顺序 * 1加载器启动找到 xxx.class文件,通过extends关键字寻找基类,先加载基类 * 2类初始化先初始化static成员变量和static---> * 2先初始化父类的static成员变量和static * 3再初始化本类的static成员变量和static * 类加载之后,对象创建开始 * 1先加载父类的非静态成员变量(静态成员变量在类初始化的时候已经加载,非静态成员变量要随对象的创建而初始化) * 2先加载父类的构造函数 * 3再加载本类的非静态成员变量 * 4再加载本类的构造函数 * 总体: * -->表示顺序 * 父类-->子类 * 静态-->非静态 * 类-->对象 * static随类的加载而加载 * 非static成员变量随对象的创建而加载 * 成员变量先于构造器加载
1 package com.test.java.classs; 2 3 /** 4 * Created by Administrator on 2015/12/8. 5 * 类的加载顺序 6 * 1加载器启动找到 xxx.class文件,通过extends关键字寻找基类,先加载基类 7 * 2类初始化先初始化static成员变量和static---> 8 * 2先初始化父类的static成员变量和static 9 * 3再初始化本类的static成员变量和static10 * 类加载之后,对象创建开始加载11 * 1先加载父类的非静态成员变量(静态成员变量在类初始化的时候已经加载,非静态成员变量要随对象的创建而初始化)12 * 2先加载父类的构造函数13 * 3再加载本类的非静态成员变量14 * 4再加载本类的构造函数15 *16 * 总体:17 * -->表示顺序18 * 父类-->子类19 * 静态-->非静态20 * 类-->对象21 * static随类的加载而加载22 * 非static成员变量随对象的创建而加载23 * 成员变量先于构造器加载24 *25 */26 public class ClassLoadOrder extends Father{27 //2父类的static成员变量加载完之后 开始加载子类的static域28 private static int k = printInt("child static k initialized");29 //5 子类的非静态成员变量初始化30 private int m = printInt("child 非static 变量加载");31 32 //子类的构造器加载33 public ClassLoadOrder() {34 System.out.println("child constructor initialized");35 System.out.println("k="+k);36 System.out.println("j="+j);37 }38 39 static {40 System.out.println("child static initialized");41 }42 static int printInt2(){43 System.out.println("child static function initialized");44 return 50;45 }46 47 public static void main(String[] args) {48 ClassLoadOrder c = new ClassLoadOrder();49 }50 }51 52 class Father{53 private int i=9;54 protected int j;55 //4 父类构造器加载56 Father(){57 System.out.println("father constructor initialized");58 System.out.println("i="+i+",j="+j);59 j=39;60 }61 //3 对象创建时,先初始化父类的非静态成员变量62 int n = printInt("father 非static变量加载");63 //1先加载父类的static域64 static {65 System.out.println("father static initialized");66 }67 //168 private static int x1 = printInt("father static .x1 initialized");69 static int printInt(String s ){70 System.out.println(s);71 return 47;72 }73 }
结果:
father static initialized
father static .x1 initialized child static k initialized child static initialized father 非static变量加载 father constructor initialized i=9,j=0 child 非static 变量加载 child constructor initialized k=47 j=39本文转自Ryan.Miao博客园博客,原文链接:http://www.cnblogs.com/woshimrf/p/5030034.html,如需转载请自行联系原作者