Java 类的加载过程(阿里面试题)
2016-09-13 17:07
295 查看
问以下程序打印出什么内容:
问题及解析如下:
问题及解析如下:
/** * 加载方法不等于执行方法,初始化变量则会赋值 * 类加载顺序应为 加载静态方法-初始化静态变量-执行静态代码块 * 实例化时 先加载非静态方法-实例化非静态变量-执行构造代码块-执行构造函数 * @author panteng * */ public class StaticTest { /**第一个加载*/ public static int k = 0; /**第二个加载,因为是new一个实例, * 首先初始化j 打印出 1:j i=0 n=0 * 执行构造块 打印出 2:构造快 i=1 n=1 * 执行构造方法 打印出 3:t1 i=2 n=2 * 实例化完成 */ public static StaticTest t1 = new StaticTest("t1"); /**第三个加载 过程同上 * 首先初始化j 打印出 4:j i=3 n=3 * 执行构造块 打印出 5:构造快 i=4 n=4 * 执行构造方法 打印出 6:t2 i=5 n=5 */ public static StaticTest t2 = new StaticTest("t2"); /**第四个加载 * 打印出 7:i i=6 n=6 */ public static int i = print("i"); /** * 第五个加载 */ public static int n = 99; /** * 此变量在类加载的时候并不初始化,在实例化类的时候初始化 */ public int j = print("j"); { print("构造快"); } /** * 第六个加载 此时,n已经被初始化 所以打印出 * 8:静态块 i=7 n=99 */ static{ print("静态块"); } //-----------以上属于类加载--------------------- /** * 实例化过程: * 首先加载非静态方法集; * 初始化非静态变量:9:j i=8 n=100 * 执行构造块:10:构造快 i=9 n=101 * 执行构造方法:11:init i=10 n=102 * 实例化完成 */ /** * 执行构造函数 实例化完成 * @param str */ public StaticTest(String str) { System.out.println((++k) + ":" + str + " i=" + i + " n=" + n); ++n; ++i; } /** * 这个应该是最先加载 但是,加载不等于执行 * 因为如果不加载此函数,静态变量是无法初始化的 * @param str * @return */ public static int print(String str) { System.out.println((++k) + ":" + str + " i=" + i + " n=" + n); ++i; return ++n; } public static void main(String[] args) { /**首先加载类,然后实例化: * 类加载过程: * 首先加载所有的静态方法,但不执行; * 然后按照静态变量的顺序开始初始化 * 静态变量初始化完毕后执行静态构造块(不执行构造块) * 此时类加载完毕 * 实例化过程: * 加载非静态方法 * 初始化非静态变量 * 执行构造代码块 * 执行构造函数 * 此时实例化完毕 */ StaticTest t = new StaticTest("init"); } }
相关文章推荐
- Java 类加载机制(阿里面试题)
- 实例解析-Java程序的加载过程
- 优化Java applets 加载过程
- java程序在执行过程中,类,对象以及它们成员加载、初始化的顺序如下:
- 黑马程序员--05.类加载器--03【从JVM加载类的过程再看类加载器】【从Java源码再看双亲委派模型】
- java类加载过程
- 解析Java Class Loader 类加载过程
- java程序的加载过程
- java面试过程中经常遇到的面试题
- Java程序的加载过程
- java 类加载全过程之第二步 验证
- java web.xml被文件加载过程,各节点加载顺序总结
- 通过类字面常量解释接口常量为什么只能定义为static final,类加载过程---Thinking in java
- 通过类字面常量解释接口常量为什么只能定义为static final,类加载过程---Thinking in java
- 黑马程序员_java的面向对象(对第六课静态..类的加载过程和单例的总结)
- 实例解析-Java程序的加载过程
- 博达面试题Java编写一个彩票双色球的过程
- 对于Java类加载过程中的顺序问题探究
- java-多线程-一道阿里面试题分析
- java程序的加载过程