设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 开源资讯 查看内容

你不知道Java的10件事

2014-11-20 10:31| 发布者: joejoe0332| 查看: 5269| 评论: 0|原作者: 黑葱|来自: CSDN CODE

摘要: 你从一开始就在使用Java吗?你是否还记得java被称作为”Oak”的时期?那时,面向对象仍然是一个热门的话题,使用C++的人们都认为Java没有任何机会,Applets 也只是一件事情。我敢打赌你肯定不知道以下一半的事情。现 ...


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 合著),或者自己思考关联子类型多态性与泛型多态性。



酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部