Java面试题之JVM相关(1)
2016-05-26 16:26
357 查看
开心一笑
女朋友给她男友打电话,电话接通的那一刻,手机里竟然传出一句:对不起,您所拨打的电话正在通话中,请稍后再拨……
女朋友一听就知道是她男友的声音,
所以没有挂断问:不是还有一句英文吗?
对面支支吾吾:Sorry,you……the number ……
提出问题
一道很坑的面试题,但是对理解JVM很有帮助???解决问题
例一:package com.evada.de; class Singleton{ private static Singleton singleton = new Singleton(); public static int counter1; public static long counter2 = 0; private Singleton(){ counter1 ++; counter2 ++; } public static Singleton getInstance(){ return singleton; } } /** * Created by Ay on 2016/5/24. */ public class LambdaTest { public static void main(String[] args) throws Exception{ Singleton singleton = Singleton.getInstance(); System.out.println("counter1 :" + Singleton.counter1); System.out.println("counter2 :" + Singleton.counter2); } }
运行结果:
counter1 :1 counter2 :0
解释:
从main函数开始,根据JVM对类的加载机制,Singleton.getInstance()主动使用,会触发类的加载,首先会为类的静态变量赋予初始值(程序从上到下执行),
即:Singleton singleton = null,counter1 = 0,counter2 = 0.
然后会进行类的初始化,即singleton = new Singleton(),会触发构造函数,执行:
counter1 ++;
counter2 ++;
后
counter1 = 1,
counter2 = 1
最后,类在初始化后,为类的静态变量赋予正确的初始值,为用户赋予的正确值(从上到下)
即:
public static int counter1;//无用户赋值
public static long counter2 = 0;//用户赋予初始值0
最终结果:
counter1 :1 counter2 :0
例二:
package com.evada.de; class Singleton{ public static int counter1; public static long counter2 = 0; private static Singleton singleton = new Singleton(); private Singleton(){ counter1 ++; counter2 ++; } public static Singleton getInstance(){ return singleton; } } /** * Created by Ay on 2016/5/24. */ public class LambdaTest { public static void main(String[] args) throws Exception{ Singleton singleton = Singleton.getInstance(); System.out.println("counter1 :" + Singleton.counter1); System.out.println("counter2 :" + Singleton.counter2); } }
运行结果
counter1 :1 counter2 :1
解释:
从main函数开始,根据JVM对类的加载机制,Singleton.getInstance()主动使用,会触发类的加载,首先会为类的静态变量赋予初始值(程序从上到下执行),
即:Singleton singleton = null,counter1 = 0,counter2 = 0.
然后会进行类的初始化,即
public static int counter1;//无用户赋值
public static long counter2 = 0;//用户赋予初始值0
后
counter1 = 0,
counter2 = 0
singleton = new Singleton(),会触发构造函数,执行:
counter1 ++;
counter2 ++;
最终结果:
counter1 :1 counter2 :1
读书感悟
来自《红猪》不会飞的猪,就只是平凡的猪
爱上他,不如先习惯他!
其他
如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎转载,点赞,顶,欢迎留下宝贵的意见,多谢支持!相关文章推荐
- 65 个职场很有技巧的回答
- Android 面试题总结之Android 基础(四)
- Android 面试题总结之Android 基础(三)
- 奋斗吧,程序员——第四十五章 柔情似水,佳期如梦
- 面试经验
- 国外程序员整理的机器学习领域和资料
- 轮子还是要重复发明的
- 牢记职场生存中的10大职业铁律 让你受用一生
- 面试题<数组中的逆序对>(12)
- 面试中你必须要知道的语言陷阱
- 数组的常见面试题
- 程序员工资为什么高?
- 数组中只出现1次的两个数字(百度面试题)
- 安卓面试重难点
- Java面试知识点整理
- 十大编程算法助程序员走上高手之路
- 最近5年133个Java面试问题列表
- 链表面试题
- 40个Java集合面试问题和答案
- 面试