T086学习网 | 站长学院 | 技术文档 | 成语 | 歇后语 | 帝国时代 | 代码收藏 | IP地址查询 | 生活百科 | 生日密码 | CSS压缩 | 用户评论 | 欣欣百宝箱

“老虎”来了 J2SE1.5新功能一览

【 天极网作者:李娟编译 更新时间:2004-09-22 | 字体:
[导读]  虽然Java版本从1.0发展到1.4.2,但Java语言本身一直没有什么大的变化,只是增加了少量关键字,所以业界一直在呼吁对Java语言进行修正,以适应新的开发技术。2004年2月Sun发布了代号为“虎”的Java 2标准版( J2SE...

  简化开发

  J2SE1.5 Beta2发布了,Sun在这个版本中对Java语言做了重大修正;这些修订包括泛型、元数据、自动包装、增强的"for"循环、枚举类型、静态导入、类似C语言的格式输入/输出、可变参数、并发程序和更简单的RMI接口。JSR - 201包含四个语言修改;增强的循环、枚举类型、静态导入和自动包装;JSR - 175指定了新的元数据函数、而JSR - 14描述了泛型。

  新的默认语言规范是由1.5版javac编译程序实现的,你不需要像在beta1版中那样提供-source 1.5这个选项。

  元数据

  J2SE 1.5 中的元数据特性提供这样的能力,即向 Java 类、接口、方法和字段关联附加的数据。这些附加的数据或者注释,可以被 javac 编译器或其他工具读取,并且根据不同配置,可以被保存在类文件中,也可以在运行时用 Java 反射 API 发现。

  添加元数据到Java平台中的最主要的原因是能够使开发工具和运行工具有一个共同的体系结构,以减少编程和部署所需要的成本。工具可以使用元数据信息生成附加的源代码,或者在调试的时候提供附加信息。

  在beta2中,我们很高兴地发现了一个名为apt的注释处理工具。 Apt包括一组新的映射应用程序编程接口和工作程序注解的支持体系结构。apt在映射应用程序编程接口时提供一个构造期间、基于源代码的程序结构的只读视图,来清晰地模拟它的Java程序语言的类型系统。首先,apt运行可以生成新的源代码和其它文件的注释处理程序。其次,apt可以编译原始的源文件和生成的源程序,简化了开发。更多的关于apt的信息,请参考apt指南http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html。

  下面的例子用元数据工具创建了一个调试元数据注释,然后这些元数据注释在运行时显示出来。可以想像,大部分的元数据标签形成一个标准,即一个良好规范的集合。

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<a.length ; i++)
   {
    System.out.println("a["+i+"]="+a[i]+" ");
   }
  }
  catch(NoSuchMethodException e)
  {
   System.out.println(e);
  }
 }
}


  使用元数据处理工具,许多重复的代码步骤可以被简化为一个简明的元数据标签。例如,当访问一个JAX-RPC服务实现的时候,所需得远程接口可以如下面的代码这样实现:

  J2SE1.5版以前

public interface PingIF extends Remote
{
 public void ping() throws RemoteException;
}
public class Ping implements PingIF
{
 public void ping() { }
}


  J2SE1.5

public class Ping
{
 public @remote void ping() { }
}


  泛型

  泛型已经为Java社团所广泛期待,现在成了J2SE 1.5版的一个组成部分。最先能看到泛型起作用的地方就是Collection API。Collection API提供了像LinkedLists, ArrayLists 和 HashMaps这样的函数,可以被不止一种的Java类型使用。接下来的示例中使用了1.4.2库和默认的javac编译方式。

ArrayList list = new ArrayList();
list.add(0, new Integer(42));
int total = ((Integer)list.get(0)).intValue();


  最后一行中的 Integer 转换是泛型所要防止的强制类型转换问题的一个例子。问题是1.4.2版本中,Collection API使用Object类来保存Collection对象,这意味着在编译时不能找出任何类型匹配。问题的第一个标志信息是在运行时抛出的 ClassCastException。

  使用泛型化的Collection库编写的相同示例如下:

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(0, new Integer(42));
int total = list.get(0).intValue();


  使用泛型应用编程接口的用户必须只使用<>符号声明在编译类型中使用的类型,不需要进行任何类型强制转换,在本例中试图向Integer集合中添加一个String对象到的操作将会在编译时被捕获。

  泛型允许 API 设计者提供这样的公共功能性:可以与多种数据类型一起使用,也可以在编译时出于类型安全对它进行检查。

  设计你们自己泛型应用程序编程接口比仅仅使用它们要复杂一些。你可以参考java.util.Collection源程序和应用编程接口指南来实现。

  基本类型的自动装箱和拆箱(Autoboxing 和 Auto-unboxing)

  象int、boolean和它们的相对应的基于Object的相应物如Integer和Boolean这样的基本数据类型互相间进行转换时,需要大量不必要的额外编码,尤其是当只是像 Collections API 这样的方法调用需要转换时更甚。

  Java基本类型的autoboxing 和 auto-unboxing 产生更加简明和易用的代码。1.5 版本让所需要的转换转变成 Integer 并转换回编译器。

  1.5版前

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(0, new Integer(42));
int total = (list.get(0)).intValue();


  1.5版

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(0, 42);
int total = list.get(0);


上一页 [1] 2 [3] [4] [5] 下一页
  • 转载请注明来源:IT学习网 网址:http://www.t086.com/ 向您的朋友推荐此文章
  • 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系我们,我们会尽快予以更正。
  • 了解这些字:
  • 更多
    留言建议ASP探针PHP探针站长Enjoy的Blog
    © 2017 T086学习网 - T086.com(原itlearner.com)
    RunTime:16.32ms QueryTime:7