`
ganglong99
  • 浏览: 162032 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

小代码分析

JVM 
阅读更多

请看如下这段小代码,结果输出什么呢?
public class Singleton {
private static Singleton obj = new Singleton();
public static int counter1;
public static int counter2 = 0;

private Singleton() {
counter1++;
counter2++;
}

public static Singleton getInstance() {
return obj;
}

public static void main(String[] args) {
Singleton obj = Singleton.getInstance();
System.out.println("obj.counter1==" + obj.counter1);
System.out.println("obj.counter2==" + obj.counter2);
}
}

这段代码的输出是什么样的呢?
结果是:
obj.counter1==1
obj.counter2==0

相信看到这个结果很多人都不知所措,下面分析一下执行过程:
1.首先,编译器加载这个类,为每个变量分配内存,此时:
obj=null,counter1=0,counter2=0;

2.然后,按照各变量的声明顺序,为变量赋初值,先为obj赋值:
obj=new Singleton();调用Singleton()构造函数,counter1和counter2分别加1,变为counter1=1,counter2=1。

3.接着为counter1赋值,但没有指定初值,因此仍然为1。

4.接着为counter2赋初值为0,结果,counter2又被变回了0.
所以最终结果是counter1=1,counter2=0。

那么,要是将第一行代码的位置改到第三行后,即:
public class Singleton {
public static int counter1;
public static int counter2 = 0;
private static Singleton obj = new Singleton();

private Singleton() {
counter1++;
counter2++;
}

public static Singleton getInstance() {
return obj;
}

public static void main(String[] args) {
Singleton obj = Singleton.getInstance();
System.out.println("obj.counter1==" + obj.counter1);
System.out.println("obj.counter2==" + obj.counter2);
}
}
结果输出会是怎样的呢?
下面我们还是按照上面的思路来分析:
1.第一步一样,分配内存:counter1=0,counter2=0,obj=null。

2.按声明顺序赋初值,counter1未指定初值,因此仍然为0;counter2指定了初值为0。

3.为obj赋初值为
obj=new Singleton();调用构造函数,counter1和counter2均加1,结果counter1=1,counter2=1。
所以最后输出结果为:
counter1==1
counter2==1

可见,将private static Singleton obj = new Singleton();这行代码的位置调换,结果就不一样,其中的原理, JVM的编译过程需要理解。

0
0
分享到:
评论

相关推荐

    java游戏小程序代码分析

    java游戏小程序代码分析java游戏小程序代码分析java游戏小程序代码分析java游戏小程序代码分析java游戏小程序代码分析java游戏小程序代码分析java游戏小程序代码分析java游戏小程序代码分析java游戏小程序代码分析...

    MATLAB 小波分析超级学习手册-程序代码

    《MATLAB小波分析超级学习手册》是一本深入探讨如何使用MATLAB进行小波分析的教程,其中包含了大量的程序代码示例。小波分析是一种强大的数学工具,它结合了信号处理和函数分析的理论,广泛应用于图像处理、信号检测...

    气象数据小波分析matlab代码

    在这个“气象数据小波分析matlab代码”中,我们可以深入理解如何利用MATLAB进行小波分析以及其在气象数据中的应用。 首先,我们要了解小波分析的基本概念。小波函数是一类具有有限支撑或快速衰减性质的函数,可以被...

    MATLAB小波分析 的 源代码

    本资源提供了MATLAB小波分析的源代码,可以帮助用户深入理解和应用小波理论。 在MATLAB中进行小波分析,首先需要了解小波函数的基础知识。小波函数是一类具有局部化特性的函数,它同时具有时间和频率的局部特性,...

    小波包分析代码_小波包_

    小波包分析是一种在信号处理和数据分析领域广泛应用的高级技术,尤其在图像处理、声音识别、金融数据分析等复杂数据解析中具有显著优势。这个压缩包包含的“小波包分析代码”显然是一组用于实现小波包分解和重构的...

    小波分析与小波相干代码

    在"小波分析与小波相干代码"这个项目中,包含了利用MATLAB进行小波分析和小波相干性研究的实验代码。MATLAB是一款强大的数值计算软件,拥有丰富的数学函数库,特别适合进行这样的复杂计算任务。 1. **小波分析**:...

    matlab小波分析超级学习手册代码大全

    matlab小波分析超级学习手册代码大全,,主要针对MATLAB中的小波分析工具箱进行的详细介绍。小波(Wavelet)这一术语,顾名思义,“小波”就是小的波形。所谓“小”是指它具有衰减性;而称之为“波”则是指它的波动性...

    MATLAB小波分析与应用30个案例分析源代码 《MATLAB小波分析与应用:30个案例分析》程序

    总之,《MATLAB小波分析与应用:30个案例分析》的源代码是学习和实践小波分析的理想资源。通过实际操作,读者可以熟悉MATLAB的编程环境,提升小波分析技能,并将其应用于各种工程问题中。这30个案例将涵盖多种应用...

    小程序源码 健康膳食 (代码源)

    小程序源码 健康膳食 (代码源)小程序源码 健康膳食 (代码源)小程序源码 健康膳食 (代码源)小程序源码 健康膳食 (代码源)小程序源码 健康膳食 (代码源)小程序源码 健康膳食 (代码源)小程序源码 健康膳食 (代码源)小...

    《MATLAB小波分析第2版》matlab代码

    本书不仅介绍了小波分析的基本概念,还提供了大量的MATLAB源代码,便于读者理解和应用小波分析技术。小波分析是一种强大的数学工具,广泛应用于信号处理、图像分析、模式识别等多个领域。 小波分析的核心在于其能够...

    matlab小波分析代码

    matlab小波分析代码matlab小波分析代码matlab小波分析代码matlab小波分析代码

    matlab小波分析张德丰书的代码。

    总的来说,张德丰教授的MATLAB小波分析代码集为学习者提供了丰富的实践素材,涵盖了小波分析的基本操作和高级应用,通过这些代码,读者可以深入理解小波分析的原理,并掌握在MATLAB中进行小波分析的实际技巧。...

    基于MATLAB的小波分析应用代码

    总之,“基于MATLAB的小波分析应用代码”是一个宝贵的学习资源,它将理论与实践相结合,有助于读者掌握小波分析的精髓,提升在信号处理和数据分析方面的技能。通过逐步探索和实践这些MATLAB实例,不仅可以巩固理论...

    小波分析第二版matlab代码

    综上所述,"小波分析第二版matlab代码"是一个全面的学习资源,涵盖了小波分析的理论和实践,对于想要深入研究小波分析及其应用的MATLAB用户来说,这是一个宝贵的资料库。通过学习和实践其中的代码,不仅可以掌握小波...

    MATLAB小波分析(第2版)张德丰 源代码

    从信号时频联合分析引入小波变换, 将小波 变换工具箱的函数作为全 书的重点,以此为基础,阐述了小波在信号处理、图像处理、数字水印中的应用,提升小波变换及应用以及小波在其他领域中的应用等内容。书中提供了...

    网上花店微信小程序代码 - 小程序 - java - uniapp -springboot - 微信小程序 - 代码

    网上花店微信小程序代码 | 小程序 | java | uniapp |springboot | 微信小程序 | 代码 1、技术栈:微信小程序,springboot,uniapp,vue,ajax,maven,mysql,MyBatisPlus 2、系统的实现 用户信息 图片素材 视频...

    基于qt平台*OPENGL的数控G代码解析与绘图

    在本文中,我们将深入探讨如何在Qt平台上利用OpenGL技术实现数控G代码的解析与绘图。G代码,也称为RS-274代码,是一种通用的编程语言,用于控制计算机数控(CNC)设备,如铣床、车床和钻床等。通过理解并解析G代码,...

    小波分析理论与Matlab实现(源代码)

    本资源包含小波分析理论与Matlab实现的所有程序源代码,旨在帮助用户深入理解和应用小波分析。 小波分析的核心概念包括小波基函数、尺度函数和小波变换。小波基函数是一种局部化的函数,可以同时提供时间和频率的...

    代码 离散小波与主成分分析的数据降维方法

    代码 离散小波与主成分分析的数据降维方法代码 离散小波与主成分分析的数据降维方法代码 离散小波与主成分分析的数据降维方法代码 离散小波与主成分分析的数据降维方法代码 离散小波与主成分分析的数据降维方法代码 ...

Global site tag (gtag.js) - Google Analytics