摘要:
本谜题旨在检验当你试图隐藏一个 final 域时将要发生的事情。下面的程序将做些什么呢? 因为在 Jeopardy 中的 PRIZE 域被声明为是 public 和 final 的,你可能会认为Java 语言将阻止你在子类中重用该域名。毕竟,final 类型的方法不能被覆写或隐藏。如果你尝试着运行该 阅读全文
摘要:
在 5.0 版中,Java 平台引入了大量的可以使操作数组变得更加容易的工具。下面这个谜题使 用了变量参数、自动包装、静态导入(请查看 http://java.sun.com/j2se/5.0/docs/guide/language[Java-5.0])以及便捷方法 Arrays.toString( 阅读全文
摘要:
下面这个程序设计在不同的包中的两个类的交互,main 方法位于 hack.TypeIt 中。那么,这个程序会打印什么呢? 本谜题看起来很直观。Hack.TypeIt 的 main 方法对 TypeIt.ClickIt 类实例化,然后调用其 doIt 方法,该方法是从 CodeTalk 继承而来。接着 阅读全文
摘要:
假设你不能修改前一个谜题(谜题 68)中的 X 和 C 这两个类。你能否编写一个类,其 main方法将读取 X.Y 类中的 Z 域的值,然后打印它。注意,不能使用反射。本谜题初看起来是不可能实现的。毕竟,X.Y 类被具有相同名字的一个域给遮掩了,因此对其命名的尝试将引用到该域上。事实上,我们是可以引 阅读全文
摘要:
下面的程序在相同的范围内具有两个名字相同的声明,并且没有任何明显的方式可以在它们二者之间做选择。这个程序会打印 Black 吗?它会打印 White 吗?甚至,它是合法的吗? 没有任何显而易见的方法可以确定该程序应该打印 Black 还是 White。编译器通常会拒绝模棱两可的程序,而这个程序看起来 阅读全文
摘要:
一个名字可以被用来引用位于不同包内的多个类。下面的程序就是在探究当你重用了一个平台类的名字时,会发生什么。你认为它会做些什么呢?尽管这个程序属于那种让你通常一看到就会感到尴尬的程序,但是你还是应该继续下去,把门锁上,把百叶窗拉上,然后试试看: 如果说这个程序有点让人讨厌的话,它看起来还是相当简单的。 阅读全文
摘要:
在下面的程序中,子类的一个域具有与超类的一个域相同的名字。那么,这个程序会打印出什么呢? 对该程序的表面分析可能会认为它应该打印 Derived,因为这正是存储在每一个 Derived 实例的 className 域中的内容。 更深入一点的分析会认为 Derived 类不能编译,因为 Derived 阅读全文
摘要:
下面的程序使用定制的比较器,对一个由随机挑选的Integer实例组成的数组进行排序,然后打印了一个描述了数组顺序的单词。回忆一下,Comparator接口只有一个方法,即compare,它在第一个参数小于第二个参数时返回一个负数,在两个参数相等时返回0,在第一个参数大于第二个参数时返回一个整数。这个 阅读全文
摘要:
下面的程序将生成整数对3取余的柱状图,那么,它将打印出什么呢? 该程序首先初始化int数组histogram,其每一个位置都为对3取余的一个数值而准备(0、1和2),所有这三个位置都被初始化为0。然后,该程序在所有232个int数值上遍历变量i,使用的是在谜题26中介绍的惯用法。因为整数取余操作(% 阅读全文
摘要:
下面的程序除了是面向对象的这一点之外,与前一个非常相似。因为从前一个程序中已经吸取了教训,这个程序使用了一个通用目的的Map实现,即一个HashMap,来替代前一个程序的IdentityHashMap。那么,这个程序会打印出什么呢? 这个程序看起来很直观,其main方法通过调用无参数的构造器创建了一 阅读全文