java类的初始化和对象的创建顺序
2015-12-08 18:34
399 查看
学习java编程思想--类的初始化p146
类的加载顺序 * 1加载器启动找到 xxx.class文件,通过extends关键字寻找基类,先加载基类 * 2类初始化先初始化static成员变量和static---> * 2先初始化父类的static成员变量和static * 3再初始化本类的static成员变量和static * 类加载之后,对象创建开始 * 1先加载父类的非静态成员变量(静态成员变量在类初始化的时候已经加载,非静态成员变量要随对象的创建而初始化) * 2先加载父类的构造函数 * 3再加载本类的非静态成员变量 * 4再加载本类的构造函数 * 总体: * -->表示顺序 * 父类-->子类 * 静态-->非静态 * 类-->对象 * static随类的加载而加载 * 非static成员变量随对象的创建而加载 * 成员变量先于构造器加载
package com.test.java.classs; /** * Created by Administrator on 2015/12/8. * 类的加载顺序 * 1加载器启动找到 xxx.class文件,通过extends关键字寻找基类,先加载基类 * 2类初始化先初始化static成员变量和static---> * 2先初始化父类的static成员变量和static * 3再初始化本类的static成员变量和static * 类加载之后,对象创建开始加载 * 1先加载父类的非静态成员变量(静态成员变量在类初始化的时候已经加载,非静态成员变量要随对象的创建而初始化) * 2先加载父类的构造函数 * 3再加载本类的非静态成员变量 * 4再加载本类的构造函数 * * 总体: * -->表示顺序 * 父类-->子类 * 静态-->非静态 * 类-->对象 * static随类的加载而加载 * 非static成员变量随对象的创建而加载 * 成员变量先于构造器加载 * */ public class ClassLoadOrder extends Father{ //2父类的static成员变量加载完之后 开始加载子类的static域 private static int k = printInt("child static k initialized"); //5 子类的非静态成员变量初始化 private int m = printInt("child 非static 变量加载"); //子类的构造器加载 public ClassLoadOrder() { System.out.println("child constructor initialized"); System.out.println("k="+k); System.out.println("j="+j); } static { System.out.println("child static initialized"); } static int printInt2(){ System.out.println("child static function initialized"); return 50; } public static void main(String[] args) { ClassLoadOrder c = new ClassLoadOrder(); } } class Father{ private int i=9; protected int j; //4 父类构造器加载 Father(){ System.out.println("father constructor initialized"); System.out.println("i="+i+",j="+j); j=39; } //3 对象创建时,先初始化父类的非静态成员变量 int n = printInt("father 非static变量加载"); //1先加载父类的static域 static { System.out.println("father static initialized"); } //1 private static int x1 = printInt("father static .x1 initialized"); static int printInt(String s ){ System.out.println(s); return 47; } }
结果:
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
相关文章推荐
- maven配置jdk
- JAVA 时间的格式转换
- Spring注解详解
- java 嵌入式的Web服务器jetty使用例子
- 简单分析Java线程编程中ThreadLocal类的使用
- java 正则表达式 得到两个字符中间的字符串(不包括这两个字符)
- 改变SpringMVC的.do访问模式
- java加密技术比较好的博客地址
- XML格式文本 与 JavaBean 相互转换
- [转]Netbeans IDE默认UTF-8编码
- 严重: Exception starting filter struts2 java.lang.NullPointerException
- 【Java并发编程实战】—–CLH队列锁
- 【Java并发编程实战】—–MCS队列锁
- 【Java并发编程实战】—–CAS操作
- Java处理数学公式得出结果
- 基于spring和Quartz定时器
- eclipse .vm文件问题
- 转 如何在eclipse中设置查看JDK类库源代码
- SpringMVC学习笔记001
- java 类加载顺序 静态变量初始化顺序,何时触发类加载