论文部分内容阅读
摘要:JDK是Java Development Kit的缩写,包括Java语言的运行环境、工具和基础类库,是使用最为广泛的Java SDK。JDK的每次升级都会带来一些激动人心的改进,主要体现在语法、类库和性能三个方面。文章从语法角度介绍即将发布的JDK7中引进的新特性,同时给出具体代码,为新版本的编码过程提供依据。
关键词:二进制 字面量下划线 精准捕获 泛型推断 语法改进
JDK7即将发布,相对以前的版本,它做出了很多改进。就语法方面,现在可以使用更加高效、安全的方式书写代码,以下分别从6个方面介绍这些变化。
1 二进制字面量
十进制是人在日常活动中最普遍使用的数制,可以方便地使用手指计数。在程序开发领域,十进制存在不能直观体现量和含义之间关系的缺点,Java语言引进八进制和十六进制字面量,分别以“0”和“0x”作为前缀。在这次版本更新中,整数字面量第一次允许以二进制形式出现,它以“0b”作为字面量前缀,适合用在需要开关功能的场合。请浏览以下代码,可以清晰地定义出文件访问权限。
byte readable=0b00000001;
byte writable=0b00000010;
byte listable=0b00000100;
2 数字字面量下划线
较长的数字在书写过程中容易漏写或多写且不易察觉,可读性也不高。数字字面量下划线可以辅助解决上述问题。请比较以下两行代码,分别定义了我国2010年和2011年人口普查结果。
int number2010=1339724852;
int number2011=13_7053_6875;
下划线的语法要求是,它的两端必须是数字或下划线。请浏览以下代码,前两行会造成编译失败,最后一行虽然能够通过编译,但可读性较差。
double illegalVelocity1=_299792.458;
double illegalVelocity2=299792._458;
double illegibleVelocity=299792.4____58;
3 接受字符串的开关语句
使用switch-case语句代替if-else语句可以提高程序的可读性。在以前的版本中,switch-case语句只接受整数类型和枚举,很多开发人员和学者要求支持字符串,这在新版本中成为可能。请分析以下代码,如果使用if-else语句将会非常麻烦。
String month="February";
switch(month){
case "January":
case "February":
//另外10个case语句
}
4 泛型推断
JDK5中增加的泛型元素,是Java语言类型安全的一次重大改进。虽然使用泛型可以在一定程度上优雅地实现了类型安全,但也有一个小小的不足——在多数情况下会造成冗余代码。需要指出的是,泛型支持几乎完全在编译器上实现,编译后字节码不包含泛型信息。那么,为什么不增强编译器去除冗余代码呢?请观察以下两行代码,它们均可以在JDK7中通过编译。
List list1=new ArrayList();
List list2=new ArrayList<>();
5 自动资源管理
资源在使用完后必须显式关闭,这是程序设计的一个常识。在Java语言中,以上过程通常使用close方法实现,并且需要使用try-catch-finally语句结构处理异常。请浏览以下典型代码,实现了文件輸入流的建立、使用和关闭。
InputStream is=null;
try{
is=new FileInputStream("filename");
is.read();
}catch(IOException e){
throw e;
}finally{
if(is!=null){
is.close();
}
}
这段代码最著名的问题是开发人员经常会以错误的方式实现它;其次,与所完成的任务相比,代码量非常大;最后,多数情况下引用pos在最后一个语句块关闭时已经没有使用价值,但随后的代码还可以访问它。为了解决这些问题,JDK7中引入自动资源管理,可以代替开发人员关闭对象。请浏览以下代码,它实现了相同的功能。
try(InputStream in=new FileInputStream("filename")){
in.read();
}
6 更简洁的捕获
部分代码会产生多种异常,需要使用多个cache捕获,JDK7中引入了两种方法简化捕获代码。请浏览以下两段cache语句,它们处理反射过程中产生的多种异常,实现相同的效果。
catch(final ClassNotFoundException|
InstantiationException|
NoSuchMethodException|
InvocationTargetException e){
throw e;
}
cache(final ReflectiveOperationException e){
throw e;
}
以上两段代码均向上层重新抛出异常,需要指出的是,异常对象e不可重新赋值;第二个cache语句中的ReflectiveOperationException异常类是前四个异常类的父类,但在上层只需要处理实际抛出的异常,这是由于JDK7可以精准地判断异常类型。
7 结语
文中介绍的改进无疑会产生更加优雅的Java代码,既增加了可读性和安全性,又减少了代码量。JDK7的改进并不止于此,它还实现了模块化、引入Lambda表达式以及文件系统API等。作为开发人员,必须时刻了解语言和开发工具的最新动态,持续提高自身的业务能力。
参考文献:
[1]马朝晖,陈美红.Java语言导学[M].北京:机械工业出版社.2003,1.
[2]陈昊鹏.Java编程思想.北京:机械工业出版社[M].2007,6.
关键词:二进制 字面量下划线 精准捕获 泛型推断 语法改进
JDK7即将发布,相对以前的版本,它做出了很多改进。就语法方面,现在可以使用更加高效、安全的方式书写代码,以下分别从6个方面介绍这些变化。
1 二进制字面量
十进制是人在日常活动中最普遍使用的数制,可以方便地使用手指计数。在程序开发领域,十进制存在不能直观体现量和含义之间关系的缺点,Java语言引进八进制和十六进制字面量,分别以“0”和“0x”作为前缀。在这次版本更新中,整数字面量第一次允许以二进制形式出现,它以“0b”作为字面量前缀,适合用在需要开关功能的场合。请浏览以下代码,可以清晰地定义出文件访问权限。
byte readable=0b00000001;
byte writable=0b00000010;
byte listable=0b00000100;
2 数字字面量下划线
较长的数字在书写过程中容易漏写或多写且不易察觉,可读性也不高。数字字面量下划线可以辅助解决上述问题。请比较以下两行代码,分别定义了我国2010年和2011年人口普查结果。
int number2010=1339724852;
int number2011=13_7053_6875;
下划线的语法要求是,它的两端必须是数字或下划线。请浏览以下代码,前两行会造成编译失败,最后一行虽然能够通过编译,但可读性较差。
double illegalVelocity1=_299792.458;
double illegalVelocity2=299792._458;
double illegibleVelocity=299792.4____58;
3 接受字符串的开关语句
使用switch-case语句代替if-else语句可以提高程序的可读性。在以前的版本中,switch-case语句只接受整数类型和枚举,很多开发人员和学者要求支持字符串,这在新版本中成为可能。请分析以下代码,如果使用if-else语句将会非常麻烦。
String month="February";
switch(month){
case "January":
case "February":
//另外10个case语句
}
4 泛型推断
JDK5中增加的泛型元素,是Java语言类型安全的一次重大改进。虽然使用泛型可以在一定程度上优雅地实现了类型安全,但也有一个小小的不足——在多数情况下会造成冗余代码。需要指出的是,泛型支持几乎完全在编译器上实现,编译后字节码不包含泛型信息。那么,为什么不增强编译器去除冗余代码呢?请观察以下两行代码,它们均可以在JDK7中通过编译。
List
List
5 自动资源管理
资源在使用完后必须显式关闭,这是程序设计的一个常识。在Java语言中,以上过程通常使用close方法实现,并且需要使用try-catch-finally语句结构处理异常。请浏览以下典型代码,实现了文件輸入流的建立、使用和关闭。
InputStream is=null;
try{
is=new FileInputStream("filename");
is.read();
}catch(IOException e){
throw e;
}finally{
if(is!=null){
is.close();
}
}
这段代码最著名的问题是开发人员经常会以错误的方式实现它;其次,与所完成的任务相比,代码量非常大;最后,多数情况下引用pos在最后一个语句块关闭时已经没有使用价值,但随后的代码还可以访问它。为了解决这些问题,JDK7中引入自动资源管理,可以代替开发人员关闭对象。请浏览以下代码,它实现了相同的功能。
try(InputStream in=new FileInputStream("filename")){
in.read();
}
6 更简洁的捕获
部分代码会产生多种异常,需要使用多个cache捕获,JDK7中引入了两种方法简化捕获代码。请浏览以下两段cache语句,它们处理反射过程中产生的多种异常,实现相同的效果。
catch(final ClassNotFoundException|
InstantiationException|
NoSuchMethodException|
InvocationTargetException e){
throw e;
}
cache(final ReflectiveOperationException e){
throw e;
}
以上两段代码均向上层重新抛出异常,需要指出的是,异常对象e不可重新赋值;第二个cache语句中的ReflectiveOperationException异常类是前四个异常类的父类,但在上层只需要处理实际抛出的异常,这是由于JDK7可以精准地判断异常类型。
7 结语
文中介绍的改进无疑会产生更加优雅的Java代码,既增加了可读性和安全性,又减少了代码量。JDK7的改进并不止于此,它还实现了模块化、引入Lambda表达式以及文件系统API等。作为开发人员,必须时刻了解语言和开发工具的最新动态,持续提高自身的业务能力。
参考文献:
[1]马朝晖,陈美红.Java语言导学[M].北京:机械工业出版社.2003,1.
[2]陈昊鹏.Java编程思想.北京:机械工业出版社[M].2007,6.