摘要:
下面这个程序使用一个匿名类执行了一个并不自然的动作。它会打印出什么呢? 根据一个肤浅的分析会判断该程序不能通过编译。reproduce方法中的匿名类试图调用Twisted类中的私有方法name。一个类不能调用另一个类的私有方法,是吗?如果你试图编译这个程序,你会发现它可以成功地通过编译。在顶层的类型 阅读全文
摘要:
下面的程序实际上不会做任何事情。更糟的是,它连编译也通不过。为什么呢?又怎么来订正它呢? 这个程序看上去简单得不可能有错误,但是如果你尝试编译它,就会得到下面这个有用的错误消息: 好吧,可能这个消息不那么有用,但是我们还是从此入手。问题在于编译器产生的缺省的Inner2的构造器为它的super调用找 阅读全文
摘要:
这个程序创建了一个对象并且检查它是否遵从某个类的不变规则(invariant)。然后该程序序列化这个对象,之后将其反序列化,然后再次检查反序列化得到的副本是否也遵从这个规则。它会遵从这个规则吗?如果不是的话,又是为什么呢? 程序中除了使用了序列化之外,看起来是很简单的。子类Sub覆写了hashCod 阅读全文
摘要:
下面的程序由一个单一的类构成,该类表示一对类型相似的对象。它大量使用了5.0版的特性,包括泛型、自动包装、变长参数(varargs)和for-each循环。关于这些特性的介绍,请查看http://java.sun.com/j2se/5.0/docs/guide/language[Java-5.0]。 阅读全文
摘要:
和前一个谜题一样,本谜题也大量使用了泛型。我们从前面的错误中吸取教训,这次不再使用原生类型了。这个程序实现了一个简单的链表数据结构。main程序构建了一个包含2个元素的list,然后输出它的内容。那么,这个程序会打印出什么呢? 又是一个看上去相当简单的程序。新元素被添加到链表的表头,而dump方法也 阅读全文
摘要:
在数学中,等号(=)定义了一种真实的数之间的等价关系(equivalence relation)。这种等价关系将一个集合分成许多等价类(equivalence class),每个等价类由所有相互相等的值组成。其他的等价关系包括有所有三角形集合上的“全等”关系和所有书的集合上的“有相同页数”的关系等。 阅读全文
摘要:
你能否举出这样一个合法的Java表达式,只要对它的某个子表达式加上括号就可以使其成为不合法的表达式,而添加的括号只是为了注解未加括号时赋值的顺序? 插入一对用来注解现有赋值顺序的括号对程序的合法性似乎是应该没有任何影响的。事实上,绝大多数情况下确实是没有影响的。但是,在两种情况下,插入一对看上去没有 阅读全文
摘要:
下面这个可怜的小类实在是太懒了,甚至于都不愿意用通常的方法进行初始化,所以它求助于后台线程。这个程序会打印什么呢?每次你运行它的时候都会打印出相同的东西吗? 虽然有点奇怪,但是这个程序看起来很直观的。静态域 initialized 初始时被设为 false。然后主线程创建了一个后台线程,该线程的 r 阅读全文
摘要:
在下面这个程序中,一个线程试图中断自己,然后检查中断是否成功。它会打印什么呢? 虽然一个线程中断自己不是很常见,但这也不是没有听说过的。当一个方法捕捉到了一个 InterruptedException 异常,而且没有做好处理这个异常的准备时,那么这个方法通常会将该异常重新抛出(rethrow)。但是 阅读全文
摘要:
从前有一个人,他认为世上只有一只不寻常的狗,所以他写出了如下的类,将它作为一个单件(singleton)[Gamma95]: 结果证明这个人的做法是错误的。你能够在这个类的外部不使用反射来创建出第2 个 Dog 实例吗?这个类可能看起来像一个单件,但它并不是。问题在于,Dog 扩展了 Excepti 阅读全文