在 JDK 早期版本中使用 Java 5 的语言特性

在 JDK 早期版本中使用 Java 5 的语言特性

ID:29716083

大小:49.00 KB

页数:6页

时间:2018-12-22

在 JDK 早期版本中使用 Java 5 的语言特性_第1页
在 JDK 早期版本中使用 Java 5 的语言特性_第2页
在 JDK 早期版本中使用 Java 5 的语言特性_第3页
在 JDK 早期版本中使用 Java 5 的语言特性_第4页
在 JDK 早期版本中使用 Java 5 的语言特性_第5页
资源描述:

《在 JDK 早期版本中使用 Java 5 的语言特性》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、在JDK早期版本中使用Java5的语言特性Java5添加了许多强大的语言特性:泛型、枚举、注释、自动装箱和增强的for循环。但是,许多工作组仍然被绑定在JDK1.4或以前的版本上,可能需要花些时间才能使用新版本。但是,这些开发人员仍然可以使用这些功能强大的语言特性,同时在JVM早期版本上部署。在这一期Java理论与实践中,BrianGoetz将演示如何在JDK早期版本中使用Java5的语言特性。随着最新的Java6.0的发布,您可能认为Java5的语言特性是“旧的新特性”。但是即使在现在,当我询问开发人员在开发时使用的Java平台的版本时,

2、通常只有一半人在使用Java5——另一半则只能表示羡慕。他们非常希望使用Java5中添加的语言特性,例如泛型和注释,但仍有许多因素妨碍他们这样做。不能利用Java5特性的开发人员包括那些开发组件、库或应用程序框架的开发人员。因为他们的客户可能仍然在使用JDK1.4或以前的版本,并且JDK1.4或以前的JVM不能装载用Java5编译的类,所以使用Java5语言特性会把他们的客户基数限制在已经迁移到Java5的公司。另一类经常避免使用Java5的开发人员是使用JavaEE的开发人员。许多开发团队不愿在JavaEE1.4及以前的版本上使用Java

3、5,因为担心其应用服务器的厂商不支持Java5。这些开发人员要迁移到JavaEE5可能还有待时日。除了JavaEE5和JavaSE5规范之间的滞后,商业JavaEE5容器没有必要在规范刚刚制定好就能使用,企业也没有必要在应用服务器出现下一个版本时就立即升级,而且在升级应用服务器之后,可能还需要花些时间在新平台上验证其应用程序。Java5语言特性的实现Java5中添加的语言特性——泛型、枚举、注释、自动装箱和增强的for循环——不需要修改JVM的指令集,几乎全部是在静态编译器(javac)和类库中实现的。当编译器遇到使用泛型的情况时,会试图检

4、查是否保证了类型安全(如果不能检查,会发出“uncheckedcast”),然后发出字节码,生成的字节码与等价的非泛型代码、类型强制转换所生成的字节码相同。类似的,自动装箱和增强的for循环仅仅是等价的“语法糖”,只是更复杂的语法和枚举被编译到普通的类中。6在理论上,可以采用javac生成的类文件,在早期的JVM中装入它们,这实际上正是JSR14(负责泛型的JavaCommunityProcess工作组)的成立目的。但是,其他问题(例如注释的保持)迫使类文件的版本在Java1.4和Java5之间变化,因此妨碍了早期JVM中装入用Java5编

5、译的代码。而且,在Java5中添加的有些语言特性依赖于Java5库。如果用javac-target1.5编译类,并试图将它装入早期JVM中,就会得到UnsupportedClassVersionError,因为-target1.5选项生成的类的类文件版本是49,而JDK1.4只支持版最大为48的类文件版本。for-each循环增强的for循环有时叫做for-each循环,编译器编译它的时候,情形与程序员提供旧式for循环一样。for-each循环能够迭代数组或集合中的元素。清单1显示了用for-each在集合上迭代的语法:清单1.for-e

6、ach循环CollectionfooCollection=...for(Foof:fooCollection){doSomething(f);}编译器把这个代码转换成等价的基于迭代器的循环,如清单2所示:清单2.清单1基于迭代器的等价循环for(Iteratoriter=f.iterator();f.hasNext();){Foof=iter.next();doSomething(f);}编译器如何知道提供的参数有一个iterator()方法呢?javac编译器的设计者可能已经内置了对集合框架的理解,但是这种方法有些不必

7、要的限制。所以,创建了一个新的接口java.lang.Iterable(请参阅清单3),并翻新集合类使其实现Iterable接口。这样,不是在核心集合框架上构建的容器类也能利用新的for-each6循环。但是这样做会形成对Java5类库的依赖,因为在JDK1.4中没有Iterable。清单3.Iterable接口publicinterfaceIterable{Iteratoriterator();}枚举和自动装箱正像for-each循环一样,枚举也要求来自类库的支持。当编译器遇到枚举类型时,生成的类将扩展库类java.lang.

8、Enum。但是,同Iterable一样,在JDK1.4类库中也没有Enum类。类似的,自动装箱依赖于添加到原始包装器类(例如Integer)的valueOf()方法。当装箱需要从

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。