static final class StaticCheck { static { getValue(); } private static int value; public StaticCheck() { super(); System.out.println("check value:" + getValue()); } private static boolean isInit = false; private static int getValue() { if (isInit) { return value; } for (int i = 0; i < 100; i++) { value += i; } return value; } }
main方法:
public static void main(String...args) { new StaticCheck(); }
这是跟书中原意相同的代码。结果呢,不用说,大家也就猜到了。
就是getValue方法执行了两遍。
但是,我做了一点小小的改动,结果好像又对了。
static final class StaticCheck { static { getValue(); } private static int value = 0; public StaticCheck() { super(); System.out.println("check value:" + getValue()); } private static boolean isInit = false; private static int getValue() { if (isInit) { return value; } for (int i = 0; i < 100; i++) { value += i; } return value; } }
差异在这里:
private static int value = 0;
我又重新给value赋值了。
所以,虽然getValue执行了两遍,但是由于value、isInit这两个变量,在第二次执行之前,都重新初始化了。所以,结果又对了。
如果,要说问题的隐蔽性的话,个人认为后一种更难发现,因为它的执行结果是符合预期的。但是,如果哪天有人对代码进行了小小的修改。
例如:
private static int value = 0; static { getValue(); }
那可就惨了!!!
相关推荐
谜题52:合计数的玩笑 谜题53:按你的意愿行事 谜题54:Null与Void 谜题55:特创论 Java谜题6——库谜题 谜题56:大问题 谜题57:名字里有什么? 谜题58:产生它的散列码 谜题59:什么是差? 谜题60:一行...
本系列内容来源于《JAVA解惑》一书,不是本人所独创,此系列内容应该说是该书的一个精简版,但内容含盖90%左右,本人看完之后是大有收获! 第1章 绪论 第2章 表达式之谜 谜题1:奇数性 谜题2:找零时刻 谜题3:长...
谜题52:总和的玩笑 .119 谜题53:做你的事吧 .123 谜题54:Null与Void .125 谜题55:特创论 127 第7 章库之谜 131 谜题56:大问题 131 谜题57:名字里有什么 133 谜题58:产生它的散列码 137 谜题59:差是...
java 表达式谜题 java 字符谜题 java 循环谜题 java 异常谜题 java 高级谜题 ......
java解惑java解惑java解惑java解惑java解惑java解惑
我整理出来的Java解惑/谜题的CHM版本,包括目录、全文搜索和收藏夹。比目前Word/PDF版本的多个目录,比TXT版本的多一些格式。-- 如果不能打开CHM,请按下面方法解决:-- 右键点击chm文档,查看属性,可以看到...
Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑Java解惑
java解惑(java谜题)中文版的. 值得一看的JAVA资料. Java puzzlers
Java解惑,是一本以大量java实例,讲述如何在程序中避免程序缺陷和程序陷阱的,解惑的过程中,介绍了一些Java编程语言中许多不易被掌握的知识点,其阅读价值非常高,适合具有Java知识的学习者和有编程经验的Java...
java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑
Java 谜题 谜题 20:我的类是什么? 下面的程序被设计用来打印它的类文件的名称。如果你不熟悉类字面常量,那么 我告诉你 Me.class.getName()将返回 Me 类完整的名称,即 “com.javapuzzlers.Me”。那么,这个程序...
Java解惑.pdf Java解惑.pdf Java解惑.pdf Java解惑.pdf
在每个谜题之后都有详细的解惑方案,这些方案在给出那些实际行为与表面上迥异的程序行为的简单解释的同时,更向读者展示了如何一劳永逸地避免底层的陷阱与缺陷。 本书以轻松诙谐的语言,寓教于乐的方式,由浅入深、...
Java解惑中文版 Java解惑 java健壮程序
Java 谜题解惑。如:奇数性、找零时刻、长整除、十六进制等相关疑惑。
Java Puzzlers 中文版(Java解惑) Java 谜题 1——表达式谜题 谜题 1:奇数性 下面的方法意图确定它那唯一的参数是否是一个奇数。这个方法能够正确运转 吗? public static boolean isOdd(int i){ return i % 2 == 1...
Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑
JAVA解惑,你面包括一些java经典的问题。
与java相关的的学习,适合初学者,可以看看