java面试题17--类的加载、对象的加载流程
来源:互联网 发布:ubuntu pycharm pyqt5 编辑:程序博客网 时间:2024/05/06 17:21
要知道该代码的执行顺序,首先明确:
1.静态代码顺序执行,请牢记!!!
2.静态代码块 -> 构造代码块 -> 构造方法
public class JDtest1 { public static JDtest1 t1 = new JDtest1(); //静态成员变量 { System.out.println("blockA"); //构造代码块 } static{ System.out.println("blockB"); //静态代码块 } public static void main(String[] args) { JDtest1 t2 = new JDtest1(); }}
1.在该代码中,加载类JDtest1时,首先执行的第一行代码,定义静态成员变量 t1,(静态成员是类所有的对象的共享的成员,而不是某个对象的成员。)
2.定义的t1的同时,又new了一个新的对象出来,这个对象是本类对象,new的过程中,首先要执行构造代码块,即输出了“blockA”
3.接着,执行下一行static代码块,输出“blockB”,至此,类加载完成
4.执行main方法,同样,new了一个JDtest1对象,接下来要执行的是构造代码块,输出“blockA”
因此,最终输出:
blockA
blockB
blockA
例题2:
public class StaticVariableTest1 { private static StaticVariableTest1 obj = new StaticVariableTest1(); private static int counter1; private static int counter2 = 0; private StaticVariableTest1(){ counter1++; counter2++; } public static StaticVariableTest1 getInstance(){ return obj; } /** * @param args */ public static void main(String[] args) { StaticVariableTest1 obj = StaticVariableTest1.getInstance(); System.out.println("obj.counter1=="+obj.counter1); System.out.println("obj.counter2=="+obj.counter2); }}
结果:
obj.counter1==1
obj.counter2==0
执行过程详解:
从main函数开始
1 类加载的过程:
1.1 先执行第一句static代码,new对象的时候,调用了构造方法
构造方法执行完毕之后,counter1==1,counter2==2
1.2 接着执行第3句,赋值语句,将counter2赋值为0
2 获取实例过程
通过getInstance的return ,返回一个在静态加载时已经创建的实例
3 打印
打印counter1 --1
打印counter2 --0
0 0
- java面试题17--类的加载、对象的加载流程
- 关于类加载的一道面试题
- 面试题 类加载的先后顺序?
- 关于类加载的奇怪面试题
- java面试题jvm字节码的加载与卸载
- 【面试题】java类加载机制探索
- 类的加载流程
- 类的加载流程
- 一个据说第一次接触都会做错的Java面试题和类加载器的介绍
- 一个据说第一次接触都会做错的Java面试题和类加载器的介绍
- 【Java面试题】之类加载:从面试题分析Java类加载机制
- 关于Java类加载双亲委派机制的思考(附一道面试题)
- 关于Java类加载双亲委派机制的思考(附一道面试题)
- 关于Java类加载双亲委派机制的思考(附一道面试题)
- 关于Java类加载双亲委派机制的思考(附一道面试题)
- 关于Java类加载双亲委派机制的思考(附一道面试题)
- Java中类的加载顺序剖析(常用于面试题)
- 由经典面试题看java中类的加载机制
- java 输入流和输出流
- 关于如何限定UITextField只能输入一个小数点的代码
- 强大的字符串转DateTime/Date类型函数
- ACdream1209-qj的招待会
- G711编码原理及代码
- java面试题17--类的加载、对象的加载流程
- spring定时任务实现方式
- Oracle 12c CDB和PDB的切换
- php干货!---初学者必须要知道的事情
- KnockOut前端框架讲解与练习
- ora--12154 :TNS :could not resolve the connect identifier specified
- Java中字符流和字节流的区别。
- 第三方包fastjson签名混淆后报错解决
- MQTT实现消息推送