博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java类的初始化和对象的创建顺序
阅读量:6231 次
发布时间:2019-06-21

本文共 2569 字,大约阅读时间需要 8 分钟。

学习java编程思想--类的初始化p146

类的加载顺序 * 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,如需转载请自行联系原作者

你可能感兴趣的文章
前端表单校验插件 jquery.validate.min.js自定义校验规则
查看>>
MySQL系列:高可用架构之MHA
查看>>
python堡垒机开发
查看>>
共享内存
查看>>
关于this
查看>>
用户登录(二次机会)且每次输错误时显示剩余错误次数(提示:使用字符串格式化)...
查看>>
[转载][转帖]谈谈我对攻读计算机研究生的看法。。。大牛的文章,见解精深独到...
查看>>
使用Python进行AES加密和解密
查看>>
Unity_UIWidgets学习笔记03_组件_Image
查看>>
linux cat 命令详解
查看>>
转.给android设备安装busybox
查看>>
Docker swarm集群增加节点和删除节点
查看>>
将 年-月-日 封装成tree树状结构
查看>>
Maximum Depth of Binary Tree
查看>>
DFS
查看>>
UIImageView
查看>>
Dynamic CRM 2013学习笔记(二)插件基本用法及调试
查看>>
c# 报表练习笔记
查看>>
Spark学习之路 (七)Spark 运行流程
查看>>
POJ2667 Hotel(线段树区间合并)
查看>>