`
txidol
  • 浏览: 54397 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

当心类初始化循环 8.21【每天一点点】

 
阅读更多

首先看下下面的程序打印什么?

 

public class Final_init {
	public static final Final_init INSTANCE = new Final_init();
	
	private final int beltSize;
	
	private static final int CURRENT_YEAR=
			Calendar.getInstance().get(Calendar.YEAR);
	
	private Final_init(){
		beltSize = CURRENT_YEAR - 1930;
	}
	
	public int beltSize(){
		return beltSize;
	}
	
	public static void main(String[] args) {
		System.out.println(INSTANCE.beltSize());
	}		
}


看起来是当前年份减1930,实际你发现它打印-1930

 

该问题是由 类初始化顺序中的循环引起的

1.Final_init类得初始化由main方法调用触发

2.首先静态域设置为缺省值

3.接着静态初始域顺序执行,第一个INSTANCE 是通过调用Final_init()构造器计算而来

4.构造器设计静态域CURRENT_YEAR的表达式来初始化beltSize。

通常读取一个静态域是引起一个类被初始化的事件之一,但我们刚已经初始化Final_init了,递归初始化会被忽略掉。

因此,CURRENT_YEAR的值仍旧是缺省值0。导致beltSize为-1930。

5.等构造器返回后,CURRENT_YEAR被初始化成了当前年份。可是太晚了 - @ -

 

所有要当心初始化循环。

还有 final类型的静态变量被初始化之前,存在着读取其值的可能。final类型的域只有在初始化表达式是常量表达式时才是常量。

 

分享到:
评论

相关推荐

    imail8.21 邮件服务器

    imail8.21是一款备受赞誉的企业级邮件服务器软件,以其高效、安全和全面的功能著称。这款软件致力于为企业提供稳定且易管理的邮件服务,确保企业的通信安全无虞,同时提高工作效率。 **一、imail8.21的主要特点** ...

    pcre-8.21.tar 安装lamp环境必备

    标题中的“pcre-8.21.tar”指的是一个名为“pcre-8.21”的软件包,其格式为tar,通常用于在Linux或类Unix系统中打包和压缩文件。这里的“pcre”代表“Perl Compatible Regular Expressions”,这是一个开源库,提供...

    pcre-8.21 源代码

    压缩包内仅包含一个文件“pcre-8.21”,这通常是一个源代码目录,可能包括头文件、源代码文件、构建脚本、文档、示例等。解压后,开发者可以查看源代码结构,理解函数和类的设计,追踪代码流程,甚至编译和调试代码...

    周版用友U8.21补丁

    用友 这个是周版网络版U8.21版的 是8年前的,好用无限制

    Saturn PCB Toolkit V8.21 安装包

    Saturn PCB Toolkit V8.21 安装包

    U8.21单机版加密狗虚拟补丁

    U8.21单机版加密狗虚拟补丁,没测试,不知道好不好用.

    Windows ISO Downloader v8.21.rar

    总之,Windows ISO Downloader v8.21是一款实用的工具,它简化了官方Windows ISO文件的获取过程,为用户提供了安全、便捷的下载途径。对于那些经常需要安装或维护Windows系统的IT专业人员和普通用户来说,这是一个...

    梦真键盘屏幕全记录 8.21

    4. "第一次请运行本程序.exe":这通常是一个首次安装或启动软件时需要执行的可执行文件,用于完成初始化设置、注册组件、检查系统兼容性等工作。用户在安装软件后应该首先运行这个程序,以确保软件能正确配置和运行...

    SetupFactory-v8.21

    Setup Factory 是一个强大的安装程序制作工具。提供了安装制作向导界面,即使你对安装制作不了解,也可以生成专业性质的安装程序。可建立快捷方式,也可直接在 Windows 系统的注册表加入内容,还能在 Win.ini 和 ...

    Saturn PCB Toolkit v8.21

    《Saturn PCB Toolkit v8.21:一站式PCB设计计算工具详解》 在电子设计领域,PCB(Printed Circuit Board,印制电路板)的设计是至关重要的环节,它决定了电子设备的性能和可靠性。Saturn PCB Toolkit v8.21是一款...

    轻松工具箱 8.21 破解版

    该工具软件包括语、数、英、理、化、生、地理及信息技术等学科,内含2000多个由作者长期积累收集及精心绘制的图形和符号,并在不断的扩充中。另外还配有对这些图形进行处理的一套工具(图形调整工具)和一套文字处理...

    setup factory 8.21 注册文件

    setup factory 8.21 注册文件

    SQLyog Ultimate 8.21

    SQLyog Ultimate 8.21 是一款强大的MySQL数据库管理工具,专为简化数据库管理和优化而设计。这个最终版经过了亲测安装,并且通过了NOD32杀毒软件的安全检查,确保用户在使用过程中的安全性。 1. **SQLyog Ultimate...

    8.21~8.27demo.txt

    8.21~8.27demo.txt

    店长培训教材8.21.doc

    店长培训教材8.21.doc

    Cisco ASA防火墙8.21-k8.bin

    Cisco ASA防火墙8.21-k8.bin,Cisco ASA防火墙8.21-k8.bin

    SetupFactory_V8.21

    **SetupFactory_V8.21** 是一款专业的安装制作软件,尤其适合于IT专业人士和开发者使用。这款工具提供了可视化的界面,使得程序打包过程变得简单而直观,支持多种编程语言的程序打包,如VB(Visual Basic)、VB.NET...

    Phone Spy电话录音软件V 8.21

    在信息化时代,电话沟通已成为日常生活中不可或缺的一部分,对于个人、企业乃至各种组织,记录通话内容的重要性不言而喻。Phone Spy V 8.21的出现,无疑为这一需求提供了强大的技术支持。 首先,让我们深入了解...

Global site tag (gtag.js) - Google Analytics