天天看点

Java 7的几个新特征

泰山不拒细壤,故能成其高;江海不择细流,故能就其深。

——《秦·李斯 谏逐客令》

在昨天的JavaOne专题讲座“JDK 7中的小改变”中,Sun的资深软件工程师尤瑟夫提议Java 7的新特征应该面向“程序员友好”(Programmer-friendly),并且应该集中在对Java语言的小改变上。其中在整数变量中允许使用二进制值以及switch语句允许使用字符串作为表达式的值,就是他提议的两个改变。

在整数型变量,如byte、short、int以及long中合法使用二进制值,使得在这个领域中的编程提供了方便。如:

byte mask = b0011;       //或者0b0011,十进制值为3

为了增强可读性,允许使用下划线,而且允许在十进制值中使用下划线。如:

int intMask = 0b1100_0011;                //在二进制值中使用下划线

long longMask = 9_223_372_036_854_775_807L;   //在十进制值中使用下划线

尤瑟夫提议的在Java 7中第二个小改变是switch语句中允许使用字符串作为其表达式的值。在目前使用的所有Java版本中, switch语句的语法格式为:

switch (integralExpression) {

       case integralValue_1 : statements;

                                     break;

       case integralValue_2 : statements;

       …

       default:                   statements;  //可选项

}

其表达式integralExpression的值规定为除long之外的整数以及字符,但不允许是字符串。

尤瑟夫对switch语句的小改进并没有改变这个语句的语法,只是将字符串也作为switch的合法表达式和值。如:

String s = someDefinedString;

switch (s) {

       case “foo” : return 1;

       case “bar” : return 2;

这种改变的确是小,但给编程带来了方便。这也符合对integral expression的定义,即字符串也是一种代码确定的整数值。

由于可以对Character、Byte、Short、Integer对象做自动卸箱(auto-unboxing),所以期待中的Java 7将对switch语句做出如下新定义:

switch语句中表达式的值可以是char、byte、short、int、Character、Byte、Short、Integer、String、enum类型;否则将产生编译错误。

如下是新switch语句的更多应用例子:

例1.利用字符串作为switch语句的选项值,调用menu对象的不同方法。

String menu = myMenu.getMenu(); //getMenu返回用户选择的菜单

switch (menu) {

    case “open”:    myMenu.openFile();  //调用对象menu的方法

                    break;

    case “save”:    myMenu.saveFile();

    case “exit”:    myMenu.exit();

    default:    System.out.println("菜单选项错误");

    }

例2.利用字符串作为switch的选项确定字符串变量day的值是否是工作日或者周末休息日。

switch(dayOfWeek) {     //dayOfWeek为定义了的字符串

    case “周1到周五”    :   day = "工作日";

    case “周六到星期天”   :   day = "周末休息";

完整程序例子和尤瑟夫提议的其他对Java 7的小改变,见即将由清华大学出版社出版的《Java编程艺术》配套资源下载网页。

据尤瑟夫和其他Java 7领衔工程师透露,Java 7将在今年年底或明年年初正式发表。

本文转自高永强51CTO博客,原文链接:http://blog.51cto.com/yqgao/163115 ,如需转载请自行联系原作者