7. GOTO 在Java中编写下列语句: 程序会编译失败,错误信息为: 因为goto是一个未使用的关键字。 虽然无法在源码中直接使用 goto 但是我们可以通过 break,continue 和 标记块实现。 字节码的 goto; 向前跳转: 它的字节码为: 向后跳转: 它的字节码为: 看,是不是出现了goto 8. Java 的类型别名 在其他语言中可以很简单的使用类型别名,例如Ceylon: (译者注:Ceylon是一种新兴的计算机编程语言,号称"Java杀手",它不是Java,而是一种受Java影响的新语言。) 以这种方式构造的 People 可以被 Set<Person> 替换: 在Java中,我们无法在全局范围上定义类型别名。由于存在 class 域或方法域, 亦可以定义。考虑两个我们很不喜欢的命名 Integer 和 Long,为它们取个简短的名称 I 和 L: 上面的程序中,在 TestClass 域内 定义 Integer 别名为 I,在 x() 方法域中定义Long 别名为 L。我们可以这样使用上面的方法: 显然这种技术不值得重视。在这个例子中,Integer 和 Long 都是 final 类型,也就意味着类型 I 和 L 是有效的别名(那样的话,程序与类型兼容性也就无缘了)。如果我们使用的不是 final 类型,那么就应该使用泛型。 看够了这些无聊的把戏了吧!来点厉害的。 9. 一些不可判定的关系类型 让我们来点咖啡,集中你的注意力,这可是很时髦的东西。考虑下面两个类型: 现在,你知道 C 和 D 的类型吗? 它们包含了递归,Java、lang、Enum 也是递归的。这两种方式有些相似,但略有不同。 由上面的规范可知,Enum 实际上是由一种糖衣语法实现的。 (译者注:糖衣语法,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用) 考虑到这一点,让我们回到先前定义的两个类型。下列代码能编译成功吗? 很难回答,Ross Tate 有个答案,不可判定: 尝试在你的Eclipse中编译上面的代码,崩溃了吧! 看这句话: 有些类型关系在Java中是不可判定的。 如果你有兴趣了解这个奇怪的Java特性更多细节,就读一读 Ross Tate的论文"Taming Wildcards in Java's Type System"(与 Alan Leung 和 Sorin Lerner 合著),或者自己思考关联子类型多态性与泛型多态性。 |