J2SE 1.5 in a Nutshell 中文版

来源:互联网 发布:js俄罗斯方块教程 编辑:程序博客网 时间:2024/06/05 17:58
<script type="text/javascript">google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//</script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>Article[h2]J2SE 1.5 in a Nutshell[/h2]--------------------------------------------------------------------------------译者按:因为对J2SE 1.5中的新特性理解的不够深入透彻,所以在翻译中肯定会有一些失准的地方,请各位看官不吝赐教 告诉我--------------------------------------------------------------------------------Calvin AustinFebruary 2004 Java2平台标准版(J2SE)1.5版本(代号"Tiger")是对Java平台和语言的下一个重要修改;目前1.5版本的J2SE包含了15个JSR的请求,相应的JCP导致了将近100个显著的修改.看到这个版本带来了这么多激动人心的变动,你可能想知道你应该从哪里开始.和以往的发布一样,所有的改动都会有一个清晰的列表保存在"Release notes guide".这篇来自J2SE开发团队的文章将带领你巡视主要的变动,使得你可以在深入API文档之前快速的把握J2SE 1.5能提供什么.J2SE 1.5版本将关注在下面几个关键的主题:简易的开发 Ease of Development 可扩展性和性能 Scalability and Performance 监视和管理能力 Monitoring and Manageability 桌面客户端 Desktop Client 还有一些特性也很重要,但是和这些主题不相关,所以他们被列在了文末: 其他的特性 Miscellaneous Features简易开发 Ease of Development你可能已经看到了一些能使得开发变得更加简易的Java语言上新特性的报告.这些特性包括了泛型类别,元数据,自动装箱,一个增强的for循环,枚举类型,静态引入,C语言风格的输入输出,变量参数,并行工具和一个简单化了的RMI接口生成.JSR 201包含了上述语言特性中的4个:增强的for循环,枚举类型,静态导入和自动装箱;JSR 175 说明了元数据机能;而JSR 14则详细说明了泛型类别.在javac编译器中使用的默认的语言是J2SE1.4.这就意味着如果你想使用任何的这些新语言特性必须在编译的时候在javac的命令行上添加一个参数 -source 1.5.(译者按:这也是目前很多的开发人员下载了这个版本以后发现无法使用这些新特性的原因.)元数据 MetadataJ2SE 1.5 中的元数据特性提供了一个连接附加数据到Java Class,Interface,Method和Field中的能力.这些附加的数据或者注解能被javac编译器或者其他的工具识别,并且可以根据配置保存在class文件中,并且能在运行时通过Java的reflection API来发现.给Java平台添加元数据的一个主要原因是似的开发和运行工具能得到一个基础框架,使得可以减少在编码和发布的时候需要的额外的努力.一个工具能使用这些元数据信息来产生一些额外的代码或者在调试的时候提供额外的信息.代替元数据工具,下面的范例代码创建了一个智能调试的元数据注解.这个注解将在随后的调试中简单的显示出来.我们可以看到大部分的元数据标签组成了一个标准的,固定的集合.import java.lang.annotation.*;import java.lang.reflect.*;@Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @interface debug {boolean devbuild() default false;int counter();}public class MetaTest {final boolean production=true;@debug(devbuild=production,counter=1) public void testMethod() {}public static void main(String[] args) {MetaTest mt = new MetaTest();try {Annotation[] a = mt.getClass().getMethod("testMethod").getAnnotations();for (int i=0; i list = new ArrayList();list.add(0, new Integer(42));int total = list.get(0).intValue();这些泛型化的集合API强制在编译的时候用<>来指定集合中存储的数据类型.用了泛型以后就不再有转型的需要了,而且在这个例子中如果试图添加一个String类型的变量到这个声明为Integer的集合中去将会导致一个编译错误.泛型类别使得API的设计者能提供通用的机能,并且能运用于多种数据类型,并且能在编译的时候就检查类型的安全性.泛型的API要稍微复杂一些.建议可以从java.util.Collection包的源代码和API的使用指南开始看起.基本类型的自动装箱和自动拆箱 Autoboxing and Auto-unboxing of Primitive Types在基本类型和对应的对象副本之间的转化,例如从基本型int,boolean到他们相对应的对象副本Integer和Boolean的转化会需要一些根本不必要的代码,特别是一些只在在集合API中会出现的转化操作.对Java基本类型的自动装箱和自动拆箱使得代码能更加简洁易懂.下面的这个例子示范了将一个int类型的数据存储到一个ArrayList中,并且再取出来.J2SE 1.5使得在int和Integer对象之间的转化能自动进行.以前 BeforeArrayList list = new ArrayList();list.add(0, new Integer(42)); int total = (list.get(0)).intValue();使用自动装箱和自动拆箱后 AfterArrayList list = new ArrayList();list.add(0, 42);int total = list.get(0);增强的for循环 Enhanced for loop在集合的API中,Iterator类别是使用率非常高的一个class.他提供了一种顺序访问集合元素的能力.新增强的for循环能在简单的顺序访问集合元素的时候代替Iterator.编译器会自动产生必要的带类型安全,并且不需要转型操作的循环代码.以前 BeforeArrayList list = new ArrayList();for (Iterator i = list.iterator(); i.hasNext();) {Integer value=(Integer)i.next();}使用增强for循环以后 AfterArrayList list = new ArrayList(); for (Integer i : list) { ... }枚举化的类型 Enumerated types这种类型和使用static final的常量相比提供了枚举化的类型.如果你曾经在你的代码中用enum这样的变量名,当你用javac -source 1.5进行编译的时候将需要调整一下你的代码,因为J2SE 1.5 引入了一个新的关键字enum.public enum StopLight { red, amber, green };静态引入 Static Import静态引入的特性是用"import static"这样的语句使得你能不输入类名就可以直接使用一个类中的静态常量.比如我们经常在添加一个控件的时候用的BorderLayout.CENTER,使用了静态引入后,你只需要简单的调用CENTER就可以了.import static java.awt.BorderLayout.*;getContentPane().add(new JPanel(), CENTER);格式化的输出 Formatted Output开发人员现在可以使用类似C语言中的printf这样的功能来产生格式化的输出.现在可以象C语言中一样使用printf,而且语言上基本没有变化,一般可以不变,有些格式可能需要稍微的变化一下.大部分的通用C printf格式都可以使用,同时一些Java的类例如Date和BigInteger也拥有了格式化规则.可以在java.util.Formatter类中找到更多的信息.System.out.printf("name count");System.out.printf("%s ]", user,total);格式化的输入 Formatted Input这个Scanner API提供了基本的读入数据的功能,例如从控制台上或者其他任何的数据流中读入数据的功能.下面的范例从标准输入中读入了一个字符串并且希望字符串随后是一个int值.Scanner中的方法例如next和nextInt会在没有数据的时候自动失效.如果你需要处理一个非常复杂的输入,那么还可以使用java.util.Formatter类中的模式匹配算法.Scanner s=Scanner.create(System.in);String param= s.next();int value=s.nextInt();s.close();不定参数 Varargs不定参数(varargs)机能允许在一个方法中传入多个不定数量的参数.而这只是简单需要用...来表示某个方法接受不定参数.而这正是在printf方法中接受任意数量个参数的基础.void argtest(Object ... args) {for (int i=0;i
原创粉丝点击