Java7新特性--实战篇
Java综合
“举世瞩目”的java 7近日发布,oracle网站上列出了java 语言的新特性 ,最近出差,晚上闲来无事,将这些java语言的新特性试了下,very cool。
下面介绍了java 7的一些新特性,翻译自oracle网站,结合自己的实战。对Java 7研究不深,以下内容有对有错,欢迎大家批评指正,共同学习!
环境: ubuntu 11.04+eclipse 3.8
本来是用netbeans7.0.1,可是非常难用(不习惯 netBeans),加之用了几天之后,eclipse3.8推出,也支持java7,就切换到了更熟悉的eclipse下。顺便说一句,ubuntu11.04界面做的挺不错的,非常喜欢(附图是win 7下的无缝模式)。
特性1:二进制字面值(Binary Literals)
在java7里,整形(byte,short,int,long)类型的值可以用二进制类型来表示了,在使用二进制的值时,需要在前面加上ob或oB,看代码
[java]
//b 大小写都可以
int a = 0b01111_00000_11111_00000_10101_01010_10;
short b = (short)0b01100_00000_11111_0;
byte c = (byte)0B0000_0001;
其次,二进制同十进制和十六进制相比,可以一目了然的看出数据间的关系。例如下面这个数组中展示了每次移动一位后数字的变化。
[java]
public static final int[] phases = {
0b00110001,
0b01100010,
0b11000100,
0b10001001,
0b00010011,
0b00100110,
0b01001100,
0b10011000
}
如果用十六进制来表示的,它们之间的关系就无法一眼看出来了。
[java]
public static final int[] phases = {
0x31, 0x62, 0xC4, 0x89, 0x13, 0x26, 0x4C, 0x98
}
特性2:数字变量对下划线_的支持
你可以在数值类型的变量里添加下滑线,除了以下的几个地方不能添加:
数字的开头和结尾
小数点前后
F或者L前
需要出现string类型值的地方(针对用0x或0b表示十六进制和二进制,参考第一点),比如0x101,不能用0_x101
[java]
int num = 1234_5678_9;
float num2 = 222_33F;
long num3 = 123_000_111L;
//下面的不行
//数字开头和结尾
int nu = _123;
int nu = 123_;
//小数点前后
float f = 123_.12;
float f = 123._12;
//F或者L前
long l = 123_L;
float f = 123_F;
//需要出现String的地方
int num = 0_b123;
float f = 0_x123F;
这个,我个人觉得没什么实际作用,只是可以提升代码的可读性。
特性3:switch 对String的支持
这个大家期待很久了,switch终于支持String了
[java]
public static void first() {
//项目状态
String status = "approval";
//我们之前经常根据项目状态不同来进行不同的操作
//目前已经换成enum类型
switch (status) {
case "shouli":
System.out.println("状态是受理");
break;
case "approval":
System.out.println("状态是审批");
break;
case "finish":
System.out.println("状态是结束");
break;
default:
System.out.println("状态未知");
}
}
每个case是使用String的equals方法来进行比较的,对大小写敏感。
和一连串的if-else-then想比,使用switch来计较String,Java编译器会生成更加有效的字节码,写一个例子测试一下。
[java]
public static void second() {
String status = "approval";
if ("shouli".equals(status)) {
System.out.println("状态是受理");
} else if ("approval".equals(status)) {
System.out.println("状态是审批");
} else if ("finish".equals(status)) {
System.out.println("状态是结束");
} else {
System.out.println("状态未知");
}
}
使用javap之后,生成字节码如下:
switch
[java]
public static void first();
Code:
0: ldc #2 // String approval
2: astore_0
3: aload_0
4: astore_1
5: iconst_m1
6: istore_2
7: aload_1
8: invokevirtual #3 // Method java/lang/String.hashCode:()I
11: lookupswitch { // 3
-1274442605: 72
-903146056: 44
1185244739: 58
default: 83
}
44: aload_1
45: ldc #4 // String shouli
47: invokevirtual #5 // Method java/lang/St
补充:软件开发 , Java ,