当前位置:编程学习 > JAVA >>

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 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,