2015年7月17日 星期五

Java 7七大新功能

原文出處:http://www.blogjava.net/ywj-316/archive/2011/03/18/346539.html
作者 : 壹咪阳光

Java 7已經完成的7大新功能:
      1
對集合類的語言支援;
      2
自動資源管理;
      3
改進的通用實例創建類型推斷;
      4
數字字面量下劃線支援;
      5 switch
中使用string
      6
二進位字面量;
      7
簡化可變參數方法調用。

      下面我們來仔細看一下這7大新功能:
      1
對集合類的語言支援
      Java
將包含對創建集合類的第一類語言支援。這意味著集合類的創建可以像RubyPerl那樣了。
     
原本需要這樣:
         List<String> list = new ArrayList<String>();
         list.add("item");
         String item = list.get(0);
  
         Set<String> set = new HashSet<String>();
         set.add("item");
         Map<String, Integer> map = new HashMap<String, Integer>();
         map.put("key", 1);
         int value = map.get("key");
      現在你可以這樣:
         List<String> list = ["item"];
         String item = list[0];
        
         Set<String> set = {"item"};
        
         Map<String, Integer> map = {"key" : 1};
         int value = map["key"];
      這些集合是不可變的。
  
      2
自動資源管理

      Java
中某些資源是需要手動關閉的,如InputStreamWritesSocketsSql classes等。這個新的語言特性允許try語句本身申請更多的資源,
  
這些資源作用於try代碼塊,並自動關閉。
     
這個:
         BufferedReader br = new BufferedReader(new FileReader(path));
         try {
         return br.readLine();
               } finally {
                   br.close();
         }
      變成了這個:
          try (BufferedReader br = new BufferedReader(new FileReader(path)) {
             return br.readLine();
          }
   
     
你可以定義關閉多個資源:
         try (
             InputStream in = new FileInputStream(src);
             OutputStream out = new FileOutputStream(dest))
         {
         // code
         }
     
為了支持這個行為,所有可關閉的類將被修改為可以實現一個Closable(可關閉的)介面。
      3 增強的對通用實例創建(diamond)的類型推斷
     
類型推斷是一個特殊的煩惱,下面的代碼:
         Map<String, List<String>> anagrams = new HashMap<String, List<String>>();
      通過類型推斷後變成:
         Map<String, List<String>> anagrams = new HashMap<>();
     
這個<>被叫做diamond(鑽石)運算符,這個運算符從引用的聲明中推斷類型。
  
      4
數字字面量下劃線支援

     
很長的數位可讀性不好,在Java 7中可以使用下劃線分隔長int以及long了,如:
         int one_million = 1_000_000;
  
運算時先去除下劃線,如:1_1 * 10 = 110120 – 1_0 = 110
      5 switch中使用string
     
以前你在switch中只能使用numberenum。現在你可以使用string了:
         String s = ...
         switch(s) {
         case "quux":
              processQuux(s);
     // fall-through
         case "foo":
   case "bar":
              processFooOrBar(s);
     break;
         case "baz":
        processBaz(s);
              // fall-through
   default:
              processDefault(s);
            break;
  }
 
      6
二進位字面量

     
由於繼承C語言,Java代碼在傳統上迫使程式師只能使用十進位,八進制或十六進位來表示數(numbers)
     
由於很少的域是以bit導向的,這種限制可能導致錯誤。你現在可以使用0b首碼創建二進位字面量:
         int binary = 0b1001_1001;
  
現在,你可以使用二進位字面量這種表示方式,並且使用非常簡短的代碼,可將二進位字元轉換為資料類型,如在byteshort
   byte aByte = (byte)0b001;   
   short aShort = (short)0b010;   
  
      7
簡化的可變參數調用

     
當程式師試圖使用一個不可具體化的可變參數並調用一個*varargs* (可變)方法時,編輯器會生成一個非安全操作的警告。
   JDK 7
將警告從call轉移到了方法聲明(methord declaration)的過程中。這樣API設計者就可以使用vararg,因為警告的數量大大減少了。

沒有留言:

Java 不同編碼字串, 其字串長度大小計算

以 Java 開發專案, 在 DAO 寫入資料庫時, 常遇到JAVA 字串與資料庫編碼不一致, 有時會產生字串過長,導致無法寫入資料庫的情況. 這時就要在入庫前, 先驗證 JAVA 編碼字串是否超出資料庫欄位長度 JAVA 依 不同編碼, 其長度是不一樣的 如: ...