国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

探秘JDK 7:將會出現新的語言特性

開發 后端
JDK 7本來在6月初將發布,但是Oracle把正式發布的時間推至今年秋天,JDK 7這個新版本將給我們帶來很多的新特性,本文將給大家介紹JDK 7中新的語言特性,重點介紹二進制字面量,switch語句對字符串的支持和整型字面量下劃線支持。

51CTO與所有的讀者一樣都在關注“Java 7”,曾經在6月4日跟蹤報道“JDK 7發布情況”。本文***將從語言特性的角度與大家一起探討一下JDK 7,看看JDK 會給***帶來什么樣的驚喜!

對JDK 7 的期待

Java平臺***的主要版本是2006年12月發布的Java SE 6,經過近4年的開發,下一代Java平臺將在今年與大家見面,根據OpenJDK功能列表的顯示,以下功能將會包含在JDK 7中(最有可能被稱為Java SE 7):

◆ 并發和集合更新;

◆ 橢圓曲線加密技術;

◆ 前向移植Java SE 6u10部署特性:Java內核,Quickstarter等;

◆ JAXB,JAXP和JAX-WS API升級;

◆ 新的語言特性:在任何Java類型上的注解,自動資源管理,二進制字面量,閉包,為模塊化編程提供語言和虛擬機支持,switch語句支持字符串,泛型實例類型推斷,整型字面量下劃線支持等;

◆ 為Java SE 6u10圖形功能提供了新的平臺API:重量級/輕量級組件的混合,半透明和任意形狀的窗口;

◆ 新的Swing組件:JXDatePicker,JXLayer裝飾構件;

◆ Swing新的Nimbus外觀;

◆ NIO.2(新的I/O,第二代);

◆ 在Solaris上支持套接字定向協議(Sockets Direct Protocol,SDP)和流控制傳輸協議(Stream Control Transmission Protocol,SCTP);

◆ Unicode 5.1支持;

◆ 升級了類加載器架構,包括了一個關閉URLClassLoader的方法;

◆ 虛擬機增強:壓縮64位對象指針,新的G1垃圾回收器,對非Java語言的支持(InvokeDynamic);

◆ 為Java 2D提供的XRender管道。

除了等待今年晚些時候的JDK 7官方發布,你也可以在其早期版本中嘗試其中的一些特性,可以去http://java.sun.com/javase/downloads/ea.jsp下載JDK 7第5個里程碑版本(目前***的版本)。

本文將重點介紹語言新特性中的二進制字面量,在switch中使用字符串和整型字面量下劃線,我的環境是Windows XP SP3+JDK 7里程碑5版本,本文引用的示例代碼可從http://www.informit.com/content/images/art_friesen_exploringjdk1/elementLinks/code.zip打包下載。

#p#

二進制字面量

Java從C/C++繼承了用十進制(63),十六進制(0x3f)和八進制符號表示整型字面量,JDK 7也允許你增加0B或0b前綴用二進制符號表示整型字面量,如:

  1. int x = 0b10101111;  
  2. System.out.printf ("%d%n", x); // Output: 175  
  3.  

轉換為二進制

java.util.Formatter類中的System.out.printf()方法提供了格式轉換功能,你可以使用它將一個整數轉換成十進制,十六進制和八進制符號,但它(仍然)不支持轉換成二進制,必須借助整數的toBinaryString()方法進行轉換:

  1. System.out.printf ("%s%n", Integer.toBinaryString (78));  
  2.  

這段代碼將輸出1001110,如果你希望Integer.toBinaryString()的輸出結果包括首位的0(這在匹配列中二進制數字時非常有用),但不幸的是,這個方法不能滿足你的愿望,必須再尋找另外的辦法。

你可能會疑惑為什么二進制字面量怎么會包含在JDK 7中,據這個特性的創始人Derek Foster講,使用按位運算的代碼更具可讀性,更容易驗證使用二進制數字指定常量的技術規范,他同時指出,從心理上講,從二進制轉換成十六進制容易犯錯。

當然,你也可以依賴整數的parseInt()方法將二進制數字字符串轉換成整數,如Integer.parseInt ("00110011", 2)將返回51,但是,由于下列原因調用這個方法會有問題:

◆ 這個方法調用比直接使用字面量更冗長,它的調用語法極其凌亂;

◆ 這個方法調用會帶來一定的性能損失;

◆ 編譯器不能內聯這個方法調用返回的值,但可以內聯一個常量的值;

◆ 在字符串中檢查到錯誤時,這個方法調用會拋出一個異常,我們在編譯時才能捕獲這個異常;

◆ 與二進制字面量不一樣,不能使用switch語句的選擇器值表示一個方法調用,如case Integer.parseInt ("00001110", 2):這樣的語法是不正確的(也很丑陋),而case 0B00001110:這樣的語法就是正確的(也易于閱讀)。

#p#

在字符串上使用switch

在JDK 7中,switch語句進行了小幅升級,現在可以在字符串上使用switch了,你可以給switch語句提供一個字符串表達式,也可以給每個case提供一個常量字符串表達式,清單1是一個使用這個特性的WC(字數統計)程序的代碼。

清單1 WC.java

  1. // WC.java  
  2. import java.io.IOException;  
  3. public class WC  
  4. {  
  5.    public static void main (String [] args) throws IOException  
  6.    {  
  7.       boolean caseInsensitive = false;  
  8.       boolean verbose = false;  
  9.       for (String arg: args)  
  10.            switch (arg)  
  11.            {  
  12.               case "-i":  
  13.               case "-I": caseInsensitive = true;  
  14.                          break;  
  15.                       
  16.               case "-V":  
  17.               case "-v": verbose = true;  
  18.                          break;  
  19.               default  : System.err.println ("usage  : "+  
  20.                                              "java WC [-i|-I -v|-V] stdin");  
  21.                          System.err.println ("example: java WC -v <WC.java");  
  22.                          return;  
  23.            }  
  24.       if (verbose)  
  25.           countWordsVerbose (caseInsensitive);  
  26.       else  
  27.           countWords ();  
  28.    }  
  29.    static void countWords () throws IOException  
  30.    {  
  31.       int ch, nWords = 0;  
  32.       while ((ch = System.in.read ()) != -1)  
  33.       {  
  34.          if (Character.isLetter (ch)) // Start of word is indicated by letter.  
  35.          {  
  36.              do  
  37.              {  
  38.                 ch = System.in.read ();  
  39.              }  
  40.              while (Character.isLetterOrDigit (ch));  
  41.              nWords++;  
  42.          }  
  43.       }  
  44.       System.out.println ("\nTotal words = " + nWords);  
  45.    }  
  46.    static void countWordsVerbose (boolean caseInsensitive) throws IOException  
  47.    {  
  48.       int ch;  
  49.       WordNode root = null;  
  50.       while ((ch = System.in.read ()) != -1)  
  51.       {  
  52.          if (Character.isLetter (ch)) // Start of word is indicated by letter.  
  53.          {  
  54.              StringBuffer sb = new StringBuffer ();  
  55.              do  
  56.              {  
  57.                 sb.append ((char) ch);  
  58.                 ch = System.in.read ();  
  59.              }  
  60.              while (Character.isLetterOrDigit (ch));  
  61.              if (root == null)  
  62.                  root = new WordNode (sb.toString ());  
  63.              else  
  64.                  root.insert (sb.toString (), caseInsensitive);  
  65.          }  
  66.       }  
  67.       display (root);  
  68.    }  
  69.    static void display (WordNode root)  
  70.    {  
  71.       // root == null when leaf node has been reached (or perhaps there are no  
  72.       // words in tree)  
  73.       if (root == null)  
  74.           return;  
  75.       // Display all words lexicographically less than the word in the current  
  76.       // node.  
  77.       display (root.left);  
  78.       // Display current node's word and number of occurrences.  
  79.       System.out.println ("Word = " + root.word + "Count = " +  
  80.                           root.count);  
  81.       // Display all words lexicographically greater than the word in the  
  82.       // current node.  
  83.       display (root.right);  
  84.    }  
  85. }  
  86. class WordNode  
  87. {  
  88.    String word;    // Stored word  
  89.    int count = 1;  // Number of occurrences of word in text  
  90.    WordNode left;  // Left subtree  
  91.    WordNode right; // Right subtree  
  92.    public WordNode (String word)  
  93.    {  
  94.       this.word = word;  
  95.       left = right = null;  
  96.    }  
  97.    public void insert (String word, boolean caseInsensitive)  
  98.    {  
  99.       int order = (caseInsensitive) ? this.word.compareToIgnoreCase (word)  
  100.                                     : this.word.compareTo (word);  
  101.       if (order > 0) // word argument lexicographically less than current  
  102.                      // word  
  103.       {  
  104.           // If left-most leaf node reached then insert new node as its  
  105.           // left-most leaf node; otherwise, keep searching left.  
  106.           if (left == null)  
  107.               left = new WordNode (word);  
  108.           else  
  109.               left.insert (word, caseInsensitive);  
  110.       }  
  111.       else  
  112.       if (order < 0) // word argument lexicographically greater than current  
  113.                      // word  
  114.       {  
  115.           // If right-most leaf node reached then insert new node as its  
  116.           // right-most leaf node; otherwise, keep searching right.  
  117.           if (right == null)  
  118.               right = new WordNode (word);  
  119.           else  
  120.               right.insert (word, caseInsensitive);  
  121.       }  
  122.       else  
  123.           this.count++; // Update number of found occurrences.  
  124.    }  
  125. }  
  126.  

#p#

上面的例子充分說明了處理命令行參數時在字符串上使用switch是很有用的,可以替代這個功能的是if-else if … else表達式,但這樣一來會使代碼更冗長。

編譯好WC.java后,指定(-i或I,區分大小寫)和(-v或-V,輸出詳細信息)命令行參數運行這個程序,如:

  1. java WC <WC.java        // Count the number of words in WC.java and report the total.  
  2. java WC -v <WC.java     // Count the number of occurrences of each word in WC.java and report   
  3.                         // each total.  
  4. java WC -i -v <WC.java  // Count the number of occurrences of each word in WC.java and report   
  5.                         // each total. Use a case-insensitive comparison so that, for example,   
  6.                         // this and This are treated as two occurrences of the same word instead   
  7.                         // of one occurrence each of two different words.  

整型字面量下劃線

JDK 7支持數字下劃線,改善了二進制,十進制,十六進制和八進制字面量的可讀性,如:

  1. int mb_directory_info = 204_555_1212;  
  2. System.out.printf ("%d%n", mb_directory_info); // Output: 2045551212  
  3. long debt = 11_000_000_000_000L;  
  4. System.out.printf ("%d%n", debt); // Output: 11000000000000  
  5. byte max_pos_value = 0x0___07F;  
  6. System.out.printf ("%d%n", max_pos_value); // Output: 127  
  7.  

你可以在連續數字之間插入一到多個下劃線,但不能在數字的最前面指定下劃線(如_25這樣是不允許的),因為這樣將被解釋為一個標識符,同樣,也不能用下劃線作為后綴(如0x3f_這樣也是不允許的)。

雖然Foster提到Integer和Long的decode()方法將支持這個特性,但目前的版本還不支持,同樣,Integer.parseInt()和Long.parseLong()也不支持這個特性。

小結

二進制字面量,switch對字符串的支持和整型字面量下劃線支持僅僅是JDK 7新語言特性的一小部分,可以說它們是小而強大,但與閉包和模塊化比起來,很多人可能會覺得它們微不足道。下一篇文章將會介紹起源于Java SE 6的半透明和任意形狀的窗口的改進。

【編輯推薦】

  1. Java 7,一個技術標準的商業咒語
  2. JDK 7功能完備版今天發布?
  3. JDK 7一再延期的背景披露以及OpenJDK的尷尬
責任編輯:佚名 來源: IT168
相關推薦

2011-07-29 09:31:32

JDK 7

2011-05-20 09:35:22

JDK7

2011-05-20 09:43:23

JDK7

2010-06-28 09:26:15

JDK 7Swing組件Java

2011-05-20 09:53:00

JDK7

2011-05-20 10:28:29

JDK7

2011-05-20 10:15:06

JDK7

2011-05-20 10:20:11

JDK7

2011-05-20 09:59:42

JDK7

2009-11-23 19:50:12

PHP6.0

2014-11-26 10:23:09

2012-08-07 09:37:23

虛擬化

2017-08-08 10:30:50

物聯網信息安全網絡

2021-05-06 20:03:00

JavaStream代碼

2015-10-27 15:42:57

軟件開發發展趨勢

2015-10-23 11:35:00

軟件開發發展趨勢

2009-07-09 16:29:19

JDK版本

2009-07-07 12:30:38

JDK1.6

2021-04-28 16:08:41

物聯網趨勢物聯網IOT

2019-09-05 09:38:36

點贊
收藏

51CTO技術棧公眾號

日韩video| 一区二区福利| 国产乱码精品一区二区三| 欧美激情亚洲自拍| 日韩欧美小视频| 视频一区二区不卡| 色婷婷av一区二区三区软件| 日韩久久久久久久久久久久| av高清资源| 清纯唯美日韩| 亚洲欧美国产va在线影院| 欧美精品久久久久久久免费观看| 国产精品成熟老女人| 亚洲 欧美 综合 另类 中字| 国产欧美高清视频在线| 婷婷四月色综合| 久久影视电视剧免费网站| 欧美极品欧美精品欧美视频| 91国偷自产一区二区三区成为亚洲经典 | 国内精品久久久久影院优 | 一区二区在线| 午夜电影久久久| 中文字幕亚洲综合久久筱田步美| 国产精品久久久久9999| 亚洲成人福利在线| 五月天激情综合网| 国产精品乱码妇女bbbb| 亚洲精品视频在线观看网站| 欧美高清一级片在线| 日本福利一区二区三区| 91成人高清| 日韩影院一区| 黄色a级片免费| 97青娱国产盛宴精品视频| 91视视频在线观看入口直接观看www | 亚洲欧美国产不卡| 狠狠色香婷婷久久亚洲精品| 国产一区二区三区四区五区美女| 欧美午夜不卡视频| 国产一区免费在线| 91caoporm在线视频| 亚洲日本黄色| 日韩欧美在线综合网| 在线观看福利一区| 欧美xxxx在线| 在线视频国产一区| 久久一区二区精品| 香蕉视频亚洲一级| 亚洲不卡一区二区三区| 久久久精品有限公司| 污污片在线免费视频| 成人18视频在线播放| 国产精品久久久久高潮| 少妇精品放荡导航| 日本免费在线视频不卡一不卡二| www.日本久久久久com.| 这里只有精品免费| 色中文字幕在线观看| 亚洲黄色录像| 亚洲性无码av在线| jyzzz在线观看视频| 成人免费视频一区二区| 成人欧美在线视频| 99精品在免费线中文字幕网站一区| 亚洲一区二区三区在线看| 18岁网站在线观看| 久久一二三四| 日韩精品不卡| 麻豆免费精品视频| 国产精品va在线观看无码| 91亚洲永久精品| 久久国产精品免费观看| 亚洲xxxx18| 激情都市亚洲| 538国产精品一区二区在线 | 松下纱荣子在线观看| 国产精品电影网站| 欧美极品少妇xxxxⅹ高跟鞋 | 一本色道久久综合亚洲精品不| 国产欧美日韩网站| 欧美精品乱码久久久久久| 91亚洲国产| 日本不卡视频一区二区| 国产高清视频一区三区| 欧美国产精品久久| 欧美区一区二区| 亚洲福利精品视频| 久久久亚洲影院| 久久精品在线免费观看| 久久男人av| 免费xxxxx网站中文字幕| 97国产精品久久| 亚洲自拍与偷拍| 色天天久久综合婷婷女18| 在线观看视频污| 视频一区二区中文字幕| 欧美videossex另类| 成人污网站在线观看| 精品国偷自产在线视频99| 2020日本不卡一区二区视频| 国产一区二区三区视频在线| 色偷偷福利视频| 成人在线一区二区| 色综合欧美在线视频区| 视频在线观看国产精品| www.爱久久| 国产人成在线视频| 中文字幕av导航| 国产91精品久久久久| 亚洲国产精品久久艾草纯爱| 99综合在线| 三级成人在线| 你懂的视频在线免费| 日韩视频一二三| 国产精品久久久久福利| 在线不卡一区二区| 另类小说欧美激情| 国产精品白浆| 永久免费网站在线| 日本成人在线免费视频| 国产精品二区在线| 夜夜嗨av一区二区三区免费区| 久久精品亚洲乱码伦伦中文| 亚洲欧洲视频| 国产乱人伦精品一区| 最新黄网在线观看| 亚洲综合日韩欧美| 狠狠色噜噜狠狠色综合久| 韩日欧美一区二区| 亚洲天堂影视av| 91精品国产综合久久精品app| 亚洲欧美激情视频在线观看一区二区三区| 日韩高清在线一区| 欧美日韩国产探花| 欧美激情黄色片| 希岛爱理av免费一区二区| 免费在线看污片| 日韩黄色网址| www.xxx黄| 中文字幕视频在线免费观看| 成熟了的熟妇毛茸茸| 天天爱天天做天天操| 蜜桃视频日韩| 懂色av一区二区三区在线播放| 国产美女久久精品| 国产精品电影在线观看| 国产综合视频在线观看| 韩国视频一区二区| 久久字幕精品一区| 日韩国产在线一| 日本女人一区二区三区| 蜜桃一区二区三区四区| 国产馆精品极品| 成人av网在线| 久久综合狠狠综合久久综合88| 99国产精品久久久久久久久久久 | 在线一区视频| 日韩激情在线观看| 国产在线精品不卡| 国产一区二区三区久久悠悠色av | 成人免费看片视频在线观看| 精品免费国产| 欧美日韩国产精品一区二区| 日本一区二区三区视频在线播放 | 欧美国产成人在线| 综合久久国产九一剧情麻豆| 亚洲成av人影院在线观看网| 制服丝袜亚洲色图| 亚洲天堂网在线观看| 欧美激情乱人伦| 国产精品老牛影院在线观看| 99国产在线| 国产午夜福利100集发布| av在线无限看| 怡红院在线观看| jizz性欧美23| 中文久久精品| 97se亚洲国产综合自在线不卡 | 欧美综合天天夜夜久久| 日韩中文字幕视频| 欧美精品人人做人人爱视频| 97公开免费视频| 免费在线观看黄色网| 精品麻豆剧传媒av国产九九九| 精品国产一区二区三区四区 | 亚洲精品在线不卡| 国产精品福利网| 2022亚洲天堂| 黄色网页在线免费观看| 青草国产精品| 丁香婷婷深情五月亚洲| 欧美久久久久免费| 成人看片人aa| 成人免费观看www在线| 妺妺窝人体色www看人体| 亚洲精品国产精品国产| 极品中文字幕一区| 亚洲欧美国产精品va在线观看| 成人免费视频77777| 日韩电影免费一区|