IT学习者 | 文章大全 | 技术文档 | 桌面壁纸 | 实用查询 | 网络电台 | 成语 | 歇后语 | 网址 | 下载 | 周公解梦 | 生日密码 | 电视剧365 | Flash
 您现在的位置: IT学习者 >> 文章大全 >> 网络编程 >> Java/JSP

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

【 作者:李娟编译    来源:天极网  更新时间:2004-9-22 | 字体:

  简化开发

  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);


文章共5页,当前在第2页 9 7 [1] [2] [3] [4] [5] 8 :
相 关 文 章
没有相关文章
相 关 软 件
没有相关下载
逃生 放生 黄玫瑰 想太多 那滋味 擦肩而过 放手去爱 北京欢迎你 依然在一起 吻得太逼真 感动天感动地 坐上火车去拉萨 怎么会狠心伤害我
心碎 冲动 小太阳 别碰我 蒲公英 千山万水 改变自己 一定要爱你 等爱的玫瑰 陷入爱里面 北极星的眼泪 最后一次的温柔 亲爱的那不是爱情
光荣 火花 坏女人 日不落 樱花草 为你写诗 独家记忆 夏天的味道 寂寞才说爱 忘不掉的伤 爱上你是个错 第三者的第三者 地球人都知道我爱你
假如 相思 是非题 有缘人 舍不得 我的答铃 死而无憾 外滩十八号 越爱越难过 123木头人 和寂寞说分手 爱上你是我的错 爱情里没有谁对谁错
加入收藏留言建议自助友情链接普通友情链接站长的Blog
版权所有   COPYRIGHT 2002-2008 ★IT学习者★ ALL RIGHTS RESERVED.