动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.Java应用技巧:SE6调用编译器的两.
.Java的中文编程与配置心得.
.Mysql的最大连接数用java程序测试.
.将文本格式的文章转换为html/xml.
.Java Socket编程(三)-1.
.提高Java程序内存效率.
.qmail的配置.
.一个经典的JAVA APPLET程序(二).
.Java 的 Class Path 和 Package(.
.详细介绍用JBuilder9开发的Strut.
.使用JNI集成java与native程序.
.使用SAX解析XML文件.
.slice方法 (String).
.J2SE中的序列化详解(一).
.Java小程序源文件的组成.
.Java与XML联合编程之DOM篇(1).
.从数据库中读出图片并显示的示例.
.JDBC系列教程(五)---准备语句.
.运用DBUnit进行高效的单元测试.
.Java Applet如何自动发e-mail.

JDK1.5中新的语言特征分类介绍

发表日期:2008-1-5 |



  本文中,我们将讨论几个在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)。
  让我们具体讨论每个新特性,并看一些例子。
  
  泛型(Generics)
  泛型是JDK1.5中一个最“酷”的特征。通过引入泛型,我们将获得编译时类型的安全和运行时更小地抛出ClassCastExceptions的可能。在JDK1.5中,你可以声明一个集合将接收/返回的对象的类型。在JDK1.4中,创建雇员名字的清单(List)需要一个集合对象,像下面的语句:
  
  List listOfEmployeeName = new ArrayList();
  
  在JDK1.5中,你将使用下面语句
  
  List<String> listOfEmployeeName = new ArrayList<String>();
  
  最“酷”的是,假如你试图插入非string类型的值,你将在编译时发现并且修正这类问题。没有泛型,你会发现这样一个bug,当你的客户调用后会告诉你,你所编写的程序抛出ClassCastException异常而崩溃。
  
  另外,当你从集合中得到一个元素时你无需进行强制转换。故原先为:
  
  String employeeName = ((String) listOfEmployee.get(i));
  
  而下面的语句将比上面的更加简单:
  
  String employeeName = listOfEmployee.get(i);
  
  不清楚对象的类型而强制转换对象是不合理的,并且更重要的是,它将在运行时失败。假使用户无意间传入一个包含string buffers类型而非string类型的集合,那结果会怎样呢。在Listing A中,客户被要求传入一个编译器无法强制的strings类型集合。Listing B中显示了同样的方法使用泛型是如何实现的。
  
  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<String> 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的集合,程序将不会编译。同时注重,该方法不包含任何强制转换。它只需要短短一行,一旦你习惯泛型后,它也更加清楚。
  
  在JDK当前版本下的For循环语法如下:
  
  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
  
  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)
  类型安全枚举提供下列特性:
  
  他们提供编译时类型安全。
  他们都是对象,因此你不需要将他们放入集合中。
  他们作为一种类的实现,因此你可以添加一些方法。
  他们为枚举类型提供了合适的命名空间。
  他们打印的值具有情报性(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;
  
  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 {
      @Remote public String getName() {
          ...
      }
      @Remote public public String getLocation() {
          ...
      }
  }
  
  正像你所看到的,所有样板化的代码都不见了。
  
  这些新特性和规格说明将在JDK1.5中实现。它将提供Java编程社区更多的选择以编写鲁棒的、可扩展的代码。认真的Java编程人员将感到着手去熟悉这一Java编程语言的新版本是很有益的。
上一篇:J2SE5.0新特性之ProcessBuilder 人气:440
下一篇:JAVA程序员必读:基础篇(2.d)语言基础 人气:400
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-9-4 LPLY CMS 网站管理系统 v5.0
2008-9-4 缤纷互动视频交友 v3.01.902
2008-9-4 ADN视频收藏专家 v3.0 bulid 080
2008-9-4 天空网络电影系统SKYUC v2.5.6 简
2008-9-4 Web Wiz Rich Text Editor(文本编
2008-9-4 幻影动漫网视频系统(Ppdong) v1.
2008-9-4 乐维电脑在线DIY配置系统
2008-9-4 老樊文章管理系统SQL版
2008-9-4 ASP.NET 2.53 缩略图水印组件源码
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵