网管联盟 | 网管论坛 | 网管u家 | 网管博客 | 网管软件 | 网管求职 | 小游戏 | 网管搜索 | 网管原创 | 网管聚合 | 网管读摘 | 网管焦点 | 世界素材 | 会员投稿 | 会员中心 
中国网管联盟
Windows Linux Cisco 网络技术 数据库 黑客攻防 DotNet Java PHP 认证 新闻资讯 服务器 存储资讯 网络设备 网管学堂 技术专题 焦点 网吧频道
 当前位置: > bitsCN.com > JAVA > 新手入门 > JDK > 探索JDK1.5高级编码特征  

探索JDK1.5高级编码特征

2004-04-06  作者:BitsCN整理  来源:中国网管联盟  点评 投稿 收藏


  今年夏天,Sun将计划发布一个JAVA编程语言的重大修改版。该版本代号取名为“Tiger”,然而,很快将会有JDK1.5的官方名称。
   
  该版本的Java语言将合并Java规格提案(Java Specification Requests,JSR)14与15 (JSR-14, JSR-175)。它还将在运行时性能(runtime performance)、可扩缩性(scalability)、易管理性(manageability)和监控(monitoring)方面有较大加强。
  
  本文中,我们将讨论几个在JDK1.5中新的语言特征,包括:
  
  泛型(Generics)--为集合(collections)提供编译时类型安全,无需每刻从Collections取得一个对象就进行强制转换(cast)
  增强的“for”循环(Enhanced For loop)--减少迭代器(iterator)的潜在错误(error-proneness)
  自动置入/自动取出(Autoboxing/unboxing)--无需在基本类型(primitive types)(例如double)和包装类型(wrapper types)(例如Double)之间人工地进行转换。
  类型安全的枚举(Typesafeenums)--提供类型安全枚举模式的各项好处。
  静态导入(Static import)--无需在使用其他类的静态成员变量前缀其类名.这将使得代码更为简洁。
  元数据(Metadata)--使编程人员避免编写样板化代码(boiler plate code),并提供机会进行宣告式程式设计(declarative programming)。

网管u家u.bitsCN.com


  让我们详细讨论每个新特性,并看一些例子。
  
  泛型(Generics)
  泛型是JDK1.5中一个最“酷”的特征。通过引入泛型,我们将获得编译时类型的安全和运行时更小地抛出ClassCastExceptions的可能。在JDK1.5中,你可以声明一个集合将接收/返回的对象的类型。在JDK1.4中,创建雇员名字的清单(List)需要一个集合对象,像下面的语句:
  
  List listOfEmployeeName = new ArrayList(); 
  
  在JDK1.5中,你将使用下面语句
  
  List listOfEmployeeName = new ArrayList();
  
  最“酷”的是,如果你试图插入非string类型的值,你将在编译时发现并且修正这类问题。没有泛型,你会发现这样一个bug,当你的客户调用后会告诉你,你所编写的程序抛出ClassCastException异常而崩溃。
  
  另外,当你从集合中得到一个元素时你无需进行强制转换。故原先为:
  
  String employeeName = ((String) listOfEmployee.get(i));
  
  而下面的语句将比上面的更加简单:
  
  String employeeName = listOfEmployee.get(i);
  
  
  不清楚对象的类型而强制转换对象是不合理的,并且更重要的是,它将在运行时失败。假使用户无意间传入一个包含string buffers类型而非string类型的集合,那结果会怎样呢。在Listing A中,客户被要求传入一个编译器无法强制的strings类型集合。Listing B中显示了同样的方法使用泛型是如何实现的。

网管联盟bitsCN@com


  
  Listing A 
  staticbooleancheckName(Collection employeeNameList, String name) {
   for (Iteratori = employeeNamList.iterator(); i.hasNext(); ) {
  String s = (String) i.next();
  if(s.equals(name)){
   return true;
  //print employee name here ......
  }
  }
  return false;
  }
  
  Listing B
  staticbooleancheckName(Collection employeeNameList, String name) {
  for (Iteratori = employeeNamList.iterator(); i.hasNext(); ) {
   if(i.next().equals(name)){
   return true;
   //print employee name here ......
   }
   }
  return false;
  
  }
  
  现在,通过方法签名可以清楚知道输入集合必须只能包含strings。如果客户试图传入一个包含string buffers的集合,程序将不会编译。同时注意,该方法不包含任何强制转换。它只需要短短一行,一旦你习惯泛型后,它也更加清晰。
  
  增强的For循环
  在JDK当前版本下的For循环语法如下:
网管u家u.bitsCN.com

  
  void printAll(Collection c) {
      for (Iteratori = c.iterator(); i.hasNext(); ) {
          Employee emp = (Employee)i.next();
          System.out.println(emp.getName());
      }
  }
   
  现在,用增强的For语句实现相同方法:
  
  voidprintAll(Collection c) {
      for (Object o : c)
          System.out.println((TimerTask)o).getName());
  }
  
  在这类For循环中,你应该将":"看成"in",所以,在该例中可以看成"for Object o in c"。你可以发现这种For循环更具可读性。
  
  自动置入/自动取出(Autoboxing/unboxing)
  Java有基本数据类型,在这些基本数据类型周围又有包装类。通常,编程人员需要将一种类型转换成另一种。看看Listing C.中的代码片断。
  
  Listing C
  public class Employee {
  
  private static final Integer CHILD = new Integer(0);
  
  public static void main(String args[]) {
  
  //code for adding n to an Integer 中国网管论坛bbs.bitsCN.com
  
  int n=10;
  
  Integer age= new Integer(30);
  
  Integer ageAfterTenYear= new Integer(age.intValue +10);
  
  }
  
  }
  
  请注意,用于计算ageAfterTenYear的内循环代码看上去是多么杂乱。现在,在Listing D.中看看相同的程序使用autoboxing重写后的样子。
  
  Listing D
  public class Employee {
      public static void main(String args[]) {
       int n=10;
       Integer age= new Integer(30);
       Integer ageAfterTenYear= age +10;
      }
  }
  
  有一件事值得注意的:在先前,如果你取出(unbox)Null值,它将变为0。在次代码中,编译器将自动地转换Integer为int然后加上10,接着将其转换回Integer.。
  
  类型安全的枚举(Typesafeenums)
  类型安全枚举提供下列特性:
  他们提供编译时类型安全。
  他们都是对象,因此你不需要将他们放入集合中。
  他们作为一种类的实现,因此你可以添加一些方法。
  他们为枚举类型提供了合适的命名空间。 网管u家u.bitsCN.com
  他们打印的值具有情报性(informative)— 如果你打印一个整数枚举(intenum),你只是看见一个数字,它可能并不具有情报性。
   
  例一:
  enum Season { winter, spring, summer, fall }
  
  例二:
  public enum Coin {
      penny(1), nickel(5), dime(10), quarter(25);
  
      Coin(int value) { this.value = value; }
  
      private final int value;
  
      public int value() { return value; }
  }
  
  静态导入(Static import)
  静态导入使代码更易读。通常,你要使用定义在另一个类中的常量(constants),像这样:
  
  importorg.yyy.pkg.Increment;
  
  class Employee {
      public Double calculateSalary(Double salary{
         return salary + Increment.INCREMENT * salary;
      }
  }
  
  当时使用静态导入,我们无需为常量名前缀类名就能使用这些常量,像这样:
  
  import static org.yyy.pkg.Increment; 中国网管联盟bitsCN.com
  
  class Employee {
      public Double calculateSalary(Double salary{
          return salary + INCREMENT * salary;
      }
  }
  
  注意,我们可以调用INCREMENT这一常量而不要使用类名Increment.。
  
  元数据(Metadata) 
  元数据特征志于使开发者们借助厂商提供的工具可以进行更简易的开发。看一看Listing E.中的代码。
  
  Listing E
  importorg.yyy.hr;
  public interface EmployeeI extends Java.rmi.Remote {
      public String getName()
          throwsJava.rmi.RemoteException;
      public String getLocation ()
          throwsJava.rmi.RemoteException;
  }
  
  public class EmployeeImpl implements EmployeeI {
      public String getName(){
      }
      public String getLocation (){
      }
  }
  
  通过元数据的支持,你可以改写Listing E中的代码为:
  
  importorg.yyy.hr;
  
  public class Employee {
中国网管联盟bitsCN.com

      @Remote public String getName() {
          ...
      }
      @Remote public public String getLocation() {
          ...
      }
  }
  
  正像你所看到的,所有样板化的代码都不见了。
  
  这些新特性和规格说明将在JDK1.5中实现。它将提供Java编程社区更多的选择以编写鲁棒的、可扩展的代码。认真的Java编程

TAGs特征   编码   高级   探索   类型   代码   集合    
 上一篇:学习J2SE过程中的30个基本概念   下一篇:WindowsXP 下 JDK 的配置
相关文章列表
探索JDK1.5高级编码特征 评论:
loading.. 评论加载中…
评论:请自觉遵守互联网相关政策法规,评论不得超过250字。

验证码: 注册用户
本类热门排行:
1.JDK的安装
2.XP下JDK1.4安装与环境配置完全图解
3.Jdk和Tomcat的安装与配置
4.各种系统安装J2SE5.0 JDK和NetBeans4.1
5.WindowsXP 下 JDK 的配置
6.java.lang包概述(可以当作学习索引)
7.java设置-JDK环境变量的设置
8.利用JDK1.5新工具进行系统性能监测
9.Java基础知识——JNI入门介绍(上)
10.Java基础知识——JNI入门介绍(下)
最新推荐文章:
1.基于JDK5.0的一些collection类使用总结
2.JDK核心API:Java1.5语言新特性简单总结
3.用JDring包设置类似于cron的日程提醒
4.详细讲解JDK内置工具使用技巧
5.用JDK5.0自带工具解决实际工作中的问题
6.导入:采用JSI封装、集成第三方类库
7.从集合类的升级联想到Java适配器模式
8.XP下JDK1.4安装与环境配置完全图解
9.JDK的安装
10.探索JDK1.5高级编码特征
网管论坛交流:
·不疯魔不成活
·令你大开眼界的真正标准化机房,已整理重
·为赈灾,女孩舍身拍“裸照”
·Windows Server 2003服务器群集创建和配
·exchange2k3全套官方资料
·双儿一周岁了。。。特殊的礼物来啦。。
·存储备份技术版块守则
·无盘技术交流区守则
·DOS命令基础大全之命令详解<作者吐血
·Windows XP 操作系统默认设置需要注意的