JDK1.5中新的语言特征

JDK1.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编程语言的新版本是很有益的
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
大学生在线租房平台管理系统按照操作主体分为管理员和用户。管理员的功能包括报修管理、报修评价管理、字典管理、房东管理、房屋管理、房屋收藏管理、房屋留言管理、房屋租赁管理、租房论坛管理、公告信息管理、留言板管理、用户管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 大学生在线租房平台管理系统可以提高大学生在线租房平台信息管理问题的解决效率,优化大学生在线租房平台信息处理流程,保证大学生在线租房平台信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理大学生在线租房平台信息,包括房屋管理,培训管理,报修管理,薪资管理等,可以管理公告。 房屋管理界面,管理员在房屋管理界面中可以对界面中显示,可以对房屋信息的房屋状态进行查看,可以添加新的房屋信息等。报修管理界面,管理员在报修管理界面中查看报修种类信息,报修描述信息,新增报修信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
基于hal库的OLED显示屏驱动C语言实现源码.zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip基于hal库的OLED显示屏驱动C语言实现源码.zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值