Java学习笔记--虚拟机类加载机制2
来源:互联网 发布:cba数据库 编辑:程序博客网 时间:2024/05/17 23:01
原文http://www.cnblogs.com/javaee6/p/3714716.html
说明:本文的内容是看了《深入理解Java虚拟机:JVM高级特性与最佳实践》后为加印象和理解,便记录了重要的内容。
1 开门见山
以前曾经看到过一个java的面试题,当时觉得此题很简单,可是自己把代码运行起来,可是结果并不是自己想象的那样。题目如下:
class SingleTon { private static SingleTon singleTon = new SingleTon(); public static int count1; public static int count2 = 0; private SingleTon() { count1++; count2++; } public static SingleTon getInstance() { return singleTon; }}public class Test { public static void main(String[] args) { SingleTon singleTon = SingleTon.getInstance(); System.out.println("count1=" + singleTon.count1); System.out.println("count2=" + singleTon.count2); }}
错误答案
count1=1
count2=1
正确答案
count1=1
count2=0
为神马?为神马?这要从java的类加载时机说起。
题目分析
上面很详细的介绍了类的加载时机和类的加载过程,通过上面的理论来分析本文开门见上的题目
class SingleTon { private static SingleTon singleTon = new SingleTon(); public static int count1; public static int count2 = 0; private SingleTon() { count1++; count2++; } public static SingleTon getInstance() { return singleTon; }}public class Test { public static void main(String[] args) { SingleTon singleTon = SingleTon.getInstance(); System.out.println("count1=" + singleTon.count1); System.out.println("count2=" + singleTon.count2); }}
分析:
1:SingleTon singleTon = SingleTon.getInstance();调用了类的SingleTon调用了类的静态方法,触发类的初始化
2:类加载的时候在准备过程中为类的静态变量分配内存并初始化默认值 singleton=null count1=0,count2=0
3:类初始化化,为类的静态变量赋值和执行静态代码快。singleton赋值为new SingleTon()调用类的构造方法
4:调用类的构造方法后count=1;count2=1
5:继续为count1与count2赋值,此时count1没有赋值操作,所有count1为1,但是count2执行赋值操作就变为0
0 0
- Java学习笔记-虚拟机类加载机制
- Java学习笔记--虚拟机类加载机制2
- 虚拟机类加载机制--《深入理解Java虚拟机》学习笔记
- 【深入理解Java虚拟机学习笔记】虚拟机类加载机制
- 《深入理解java虚拟机》学习笔记一/类加载机制
- 《深入理解JAVA虚拟机》学习笔记(六)JAVA虚拟机类加载机制
- Java虚拟机学习 - 类加载机制
- Java虚拟机学习 - 类加载机制
- Java虚拟机学习 - 类加载机制
- Java虚拟机学习 - 类加载机制
- Java虚拟机学习 - 类加载机制
- Java虚拟机学习 - 类加载机制
- Java虚拟机学习 - 类加载机制
- Java虚拟机学习 - 类加载机制
- Java虚拟机学习 - 类加载机制
- java虚拟机学习笔记二:浅谈虚拟机的类加载执行子系统机制
- 深入理解Java虚拟机学习笔记——三、虚拟机类加载机制
- 《深入理解java虚拟机》学习笔记(4)--虚拟机类加载机制
- [DIV/CSS] CSS页面布局笔记
- ACE_TP_Reactor 实现 Leader-Follower 线程模型分析
- Alluxio文件操作Java API示例
- 北上深的天价房都卖给了谁
- HBase深入学习(2)
- Java学习笔记--虚拟机类加载机制2
- 人人都该了解的十大算法
- poj 2299 Ultra-QuickSort
- 用户注册小例子
- thinkphp 表单自动验证功能
- Android中error inflating class fragment问题
- CSS3实现翻转(Flip)效果
- Alluxio层次化存储简介
- 在activity中动态设置显示和隐藏通知栏