`
ballanfeng
  • 浏览: 18182 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
最近访客 更多访客>>
社区版块
存档分类
最新评论

jdk1.5的新特性

阅读更多

我们将讨论几个在JDK1.5中新的语言特征,包括:

  1.泛型(Generics)--为集合(collections)提供编译时类型安全,无需每刻从Collections取得一个对象就进行强制转换(cast)

  2.增强的“for”循环(Enhanced For loop)--减少迭代器(iterator)的潜在错误(error-proneness)

  3.自动置入/自动取出(Autoboxing/unboxing)--无需在基本类型(primitive types)(例如double)和包装类型(wrapper types)(例如Double)之间人工地进行转换。

  4.类型安全的枚举(Typesafeenums)--提供类型安全枚举模式的各项好处。

  5.静态导入(Static import)--无需在使用其他类的静态成员变量前缀其类名.这将使得代码更为简洁。

  6.元数据(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类型的值,你将在编译时发现并且修正这类问题。没有泛型,你会发现这样一个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 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”循环(Enhanced For loop)


  在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),像这样:

  import org.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新特性

    ### JDK 1.5 新特性详解 #### 泛型编程 **定义与作用:** 泛型编程是 Java 1.5 引入的一项重要特性,它允许开发者在编译时进行类型安全检查,从而避免了运行时可能出现的类型转换异常。通过在编译阶段检查类型安全...

    JDK1.5新特性

    JDK1.5新特性

    Jdk1.5新特性

    博文链接:https://weibaojun.iteye.com/blog/70284

    JDK 1.5新特性

    【JDK 1.5新特性详解】 JDK 1.5是Java发展历程中的一个重要里程碑,引入了许多创新特性,极大地提升了开发效率和代码质量。这些新特性包括泛型(Generics)、增强的“for”循环(Enhanced For loop)、自动装箱/...

    详细描述jdk1.5新特性

    ### 详细描述 JDK 1.5 新特性:泛型 #### 一、引言 Java 5.0(也称为 JDK 1.5)引入了一系列重要的新特性,这些特性极大地提高了开发者的编程效率和代码质量。其中最显著的特性之一便是泛型(Generics)。本文将...

    详细介绍JDK1.5的各种新特性

    以下是JDK1.5中的主要新特性及其详细解释: 1. **泛型(Generics)**:泛型是JDK1.5引入的最大变革之一。它允许在类、接口和方法中使用类型参数,提高了代码的类型安全性和重用性。泛型帮助程序员在编译时检查类型...

    jdk1.5新特性介绍

    ### JDK 1.5 新特性介绍 #### 一、JDK 概述 JDK(Java Development Kit),即Java开发工具包,是用于编写Java applet和应用程序的主要平台。它包含了一个位于操作系统之上、用于执行Java applet和应用程序的运行...

    JDK1.5新特性泛型_深入研究.doc

    ### JDK1.5新特性泛型深入研究 #### 一、引言 随着软件工程的发展,类型安全成为了程序设计中的一个重要考量因素。Java作为一种广泛使用的编程语言,在其发展历程中不断引入新的特性以满足日益增长的需求。JDK1.5...

    JDK 1.5新特性及应用

    JDK 1.5 是Java发展历程中的一个重要里程碑,它引入了一系列新特性,极大地提升了编程的效率和代码的可读性。以下将详细讲解其中的一些关键特性及其应用。 1. 类型安全的枚举(Type-Safe Enumerations) 在JDK 1.5...

    jdk1.5新特性关于动态参数,泛型等

    在 JDK 1.5 中,Java 语言引入了一系列重要的新特性,极大地提升了代码的可读性、安全性以及效率。以下是对这些新特性的详细解析: 1. 泛型(Generics) 泛型是 JDK 1.5 最重要的改进之一,它允许在定义集合类时...

    jdk 1.5新特性笔记

    ** JDK 1.5,也称为Java SE 5.0,是Java开发工具包的一个重要版本,它引入了许多显著的新特性和改进,极大地提升了Java语言的效率和可维护性。以下是一些主要的新特性及其详细解释:** 1. **泛型(Generics)** ...

    jdk1.5 windows版本 64位

    标题:“jdk1.5 windows版本 64位” 描述:“jdk1.5 windows版本 64位,Java开发依赖环境” 标签:“windows” 在这个主题中,我们聚焦的是Oracle JDK 1.5(也被称为Java Development Kit,简称JDK)在Windows...

    JAVA jdk1.5的新特性

    1.增强的for循环【foreach{}迭代数组或集合】 格式:for(变量的类型 变量名:集合变量名 ){} 注意:集合变量可以是数组或实现了Iterable接口的集合类 2.静态导入(这样调用一个静态方法的时候就不需要【类名....

    jdk1.5x64位 windows版.zip

    综上所述,JDK1.5是Java发展历程中的一个重要里程碑,它的特性改进了编程体验,提升了代码质量和运行效率。而64位Windows版的JDK1.5,则是针对Windows用户的一种优化选择,满足了开发者在64位环境下的需求。文件"jdk...

    jdk1.5新特性[归纳].pdf

    JDK 1.5引入了许多重要的特性,...以上是JDK 1.5中的一些主要新特性,它们极大地提高了Java开发的便利性和代码的可读性,也使得Java语言更加现代化。理解并熟练运用这些特性,对于编写高效、简洁的Java代码至关重要。

    linux系统jdk1.5下载

    JDK1.5引入了一些重要的特性,如增强的for循环(foreach)、匿名内部类的改进、枚举类型以及泛型的初步支持。这些特性对Java编程产生了深远影响,提升了代码的可读性和安全性。 然而,由于JDK1.5已不再受官方支持,...

Global site tag (gtag.js) - Google Analytics