类初始化及加载学习(一)
来源:互联网 发布:中国汽车内饰网数据 编辑:程序博客网 时间:2024/05/06 20:01
今天看了《Thinking In Java》的一点内容,感觉只看书依然有些模糊,于是,动手实际Debug了下,一步一步看程序如何运行的,并准备记录下来。先将代码贴上:
/** * @author Herb 2016/8/16 */class Insect{ private int i = 9; protected int j; Insect(){ System.out.println("i = "+ i +",j = "+j); } private static int x1 = printInit("static Insect.x1 initialized"); static int printInit(String s){ System.out.println(s); return 47; }}public class Beetle extends Insect{ private int k =printInit("Beetle.k initialized"); public Beetle(){ System.out.println("k = " + k); System.out.println("j = " + j); } private static int x2 = printInit("static Beetle.x2 initialized"); public static void main(String[] args){ System.out.println("Beetle Constructor"); Beetle b = new Beetle(); }}
以上为书中代码,并无改动。下面介绍运行情况。
首先在带有所有的static关键字的语句前打断点,再在构造函数前加断点,然后开始调试:
1. 程序启动之后直接进入基类Insect的静态函数之中:其实是先进入了静态变量,因为初始化时调用静态函数,故停在了printinit(String s)之中,继续下一步执行
2. 静态函数执行完输出static Insect.x1 initialized ,然后将x1置为47,go on
3. 程序跳到了Beetle类中的静态变量x2的初始化,同上一步相同,再执行静态函数printinit(String s),输出 static Beetle.x2 initialized ,然后将x2赋值为47 ,继续
4. 此时类加载完成,开始了主函数main()的执行,执行main()函数的第一条输出语句,输出Beetle Constructor, 继续
5. 创建Beetle对象,首先调用基类Insect的构造函数,注意:虽然转到构造函数的入口,但并没有立即进入执行,而是先跳到外部执行其成员变量的初始化,这点值得注意。然后再执行构造方法内部语句,输出
6. 父类构造方法执行完毕后,执行Beetle的构造方法,同样是先执行成员变量的初始化,由于其成员变量的初始化需要printinit(String s) ,故又一次调用该函数,完毕后返回47给k ,接着执行构造函数中的输出语句
7. 构造函数执行完毕后,返回主函数,对象创建完毕。
书中的这段代码,感觉很经典,同时,有其他想法也可以继续在这之上修改调试。
仅根据自己的学习体会写出来而已,或许很浅显,但对我来说值得学习,轻喷。
- 类初始化及加载学习(一)
- 类初始化及加载
- 类的加载及初始化
- 初始化及类的加载!
- 初始化及类的加载
- 初始化及类的加载
- 包括继承的类的初始化及类的加载一(附源码)
- 继承、初始化及类的加载
- Java 初始化及类的加载
- Java类的加载及初始化
- java类的加载及初始化过程
- Java类加载及变量初始化过程
- Java类的加载及初始化顺序
- Java初始化及类的加载
- Java类加载及初始化顺序
- Java类加载及变量初始化过程
- Java学习笔记之五《初始化及类的类的加载》
- JVM类加载初始化学习笔记(转载)
- oracle坏块简单测试修复步骤
- 学习angularjs客户端表单验证
- 判断数组中是否包含某个值
- HTML5中的aria与role
- 文本框只能输入数字
- 类初始化及加载学习(一)
- 苹果新专利:测心电可穿戴设备、iphone7夜间拍照和防水技术、Apple Watch震动马达
- 获取网络时间(国家标准时间-北京时间为准)
- HDU 1203
- 知识积累
- Android知识点总结,学习过程梳理
- android无法往SD卡写入文件
- 自定义安卓照相机
- slightphp query sql leftjoin