<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Java 7 的更改,特性和增強 > 原文: [https://howtodoinjava.com/java7/java-7-changes-features-and-enhancements/](https://howtodoinjava.com/java7/java-7-changes-features-and-enhancements/) 我已經介紹了許多 **java 7 更改**,這些更改在發行版中是新的。 在這篇文章中,我將對它們進行總結,以便有興趣的人可以在短時間內快速了解所有特性。 ```java Features covered in this post Improved type Inference Or Diamond Operator Automatic resource management with try-with-resources NIO 2.0 Exception handling improvements Suppressed exceptions Catch Multiple Exceptions in catch block Number formatting enhancement String class support in switch statement Binary Literals with prefix "0b" ForkJoin Framework Automatic reloading with WatchService G1 Garbage Collector ``` ## 改進的類型推斷 在 Java 7 之前,使用泛型時,必須為變量類型及其實際類型提供類型參數。 現在,此新的 Java 7 特性已使它有所緩解,并且聲明右側的空白菱形將可以正常工作。 編譯器在 Java 7 中足夠聰明,可以識別出空白菱形推斷出在聲明左側定義的類型。 ```java public class ElvisOperatorTest { public static void main(String[] args) { @SuppressWarnings("unused") Map params = new HashMap&lt;&gt;(); } } ``` ## 使用`try-with-resources`的自動資源管理 在 Java 7 之前,我們必須使用`finally`塊來清理資源。 `finally`塊不是強制性的,但是清理資源是為了防止系統損壞。 使用 Java 7,無需顯式的資源清理。 它是自動完成的。 在`try-with-resources`塊(`try(…){…}`)中初始化資源時,將完成自動資源清除。 由于新接口`AutoCloseable`而進行清理。 `try`塊完成后,JVM 將立即調用其 `close`方法。 您不應在代碼中調用`close()`方法。 這應該自動稱為 JVM。 手動調用它可能會導致意外結果。 ```java public class ResourceManagementInJava7 { public static void main(String[] args) { try (BufferedReader br = new BufferedReader(new FileReader("C:/temp/test.txt"))) { String sCurrentLine; while ((sCurrentLine = br.readLine()) != null) { System.out.println(sCurrentLine); } } catch (IOException e) { e.printStackTrace(); } } } ``` ## NIO 2.0 Java SE 7 引入了`java.nio.file`包及其相關包`java.nio.file.attribute`,為文件 I/O 和訪問默認文件系統提供了全面的支持。 路徑類是一個很大的補充,它允許您以統一的方式表示操作系統中的任何路徑。 新的 API 是對舊 API 的補充,并提供了一些有用的方法檢查,刪除,復制和移動文件。 您也可以像在 Linux 中那樣創建符號鏈接和硬鏈接。 JDK 7 新文件 API 還能夠使用通配符/正則表達式搜索文件。 您還將獲得支持以查看目錄中的更改。 繼續探索鏈接網頁中的所有這些更改。 ## 異常處理方面的改進 Java 7 在異常處理方面也帶來了一些不錯的增強。 這些可以大致分為兩個特性: ## 受抑制的異常 顧名思義,抑制的異常是在代碼中引發的異常,但是以某種方式被忽略。 如果您還記得`try-catch-finally`塊的執行順序以及它們如何返回任何值或異常,則您會記得,在`try`塊中也拋出異常的情況下,抑制了`finally`塊中引發的異常。 在 Java 7 之前的版本中,通過記錄日志了解了這些異常(如果已實現),但是一旦`finally`塊結束,您就無法控制這些異常類型。 使用 Java 7 中的新特性,您還可以控制這些受抑制的異常。 用法示例如下: ```java public class SuppressedExceptionDemoWithTryFinallyNew { /** * Executable member function demonstrating suppressed exceptions * Suppressed expression is added back in primary exception */ public static void memberFunction() throws Exception { Throwable th = null; DirtyResource resource= new DirtyResource(); try { resource.accessResource(); } catch(Exception e) { th = e; throw e; } finally { try { resource.close(); } catch(Exception e) { if(th != null) { e.addSuppressed(th); //Add to primary exception throw e; } } } } /** * Executable function demonstrating suppressed exceptions. */ public static void main(String[] arguments) throws Exception { try { memberFunction(); } catch(Exception ex) { err.println("Exception encountered: " + ex.toString()); final Throwable[] suppressedExceptions = ex.getSuppressed(); final int numSuppressed = suppressedExceptions.length; if (numSuppressed &gt; 0) { err.println("tThere are " + numSuppressed + " suppressed exceptions:"); for (final Throwable exception : suppressedExceptions) { err.println("tt" + exception.toString()); } } } } } Output: Exception encountered: java.lang.NullPointerException: Remember me. I am your worst nightmare !! I am Null pointer exception !! There are 1 suppressed exceptions: java.lang.RuntimeException: I wanted to access this resource. Bad luck. Its dirty resource !!! ``` 閱讀有關鏈接文章的更多信息。 ## 在`catch`塊中捕獲多個異常 在此特性中,現在您可以在單個`catch`塊中捕獲多個異常。 在 Java 7 之前,您只能捕獲一個。 要指定期望的異常列表,請使用豎線(`|`)。 讓我們來看一個例子。 ```java try { //Do some processing which throws NullPointerException; I am sending directly throw new NullPointerException(); } //You can catch multiple exception added after 'pipe' character catch(NullPointerException | IndexOutOfBoundsException ex) { throw ex; } ``` 請記住:如果`catch`塊處理多個異常類型,則`catch`參數隱式為`final`。 在此示例中,`catch`參數`ex`是最終的,因此您不能在`catch`塊中為其分配任何值。 ## 數字格式增強特性 如果必須讀取數字“1000000”,那么在第一個站點中讀取該數字有多方便。 不多吧? 我們習慣于以`10,00,000`格式讀取數字。 好消息是 Java 已經開始支持以這種格式寫數字。 好吧,不完全是這樣,而是匹配的格式。 現在,您可以像上面這樣寫上面的數字:`10_00_000`。 足夠好了,不是嗎? ```java /** * Supported in int * */ int improvedInt = 10_00_000; /** * Supported in float * */ float improvedFloat = 10_00_000f; /** * Supported in long * */ float improvedLong = 10_00_000l; /** * Supported in double * */ float improvedDouble = 10_00_000; ``` ## `switch`語句中的字符串類支持 如果您還記得 java 7 之前的`switch`語句,則它僅支持`int`和`enum`類型。 現在,隨著 Java 7 的發布,還添加了對`String`類的支持。 讓我們來看一個例子。 ```java switch (token) { case ("one"): return "Token one identified"; case ("two"): return "Token one identified"; case ("three"): return "Token one identified"; case ("four"): return "Token one identified"; default: return "No token was identified"; } ``` ## 前綴為`0b`的二進制字面值 在 JDK 7 中,您可以為整數類型(字節,短型,整型和長型)以前綴`0b`(或`0B`)以二進制形式表示字面值。 在 JDK 7 之前,您只能使用八進制值(前綴為`0`)或十六進制值(前綴為`0x`或`0X`)。 例如: ```java int sameVarOne = 0b01010000101; or if use the number formatting feature as well. int sameVarTwo = 0B01_010_000_101; ``` ## ForkJoin 框架 在 Java 程序中有效使用并行內核一直是一個挑戰。 很少有本地框架可以將工作分配到多個核心,然后將它們加入以返回結果集。 Java 7 已將此特性作為 Fork 和 Join 框架合并。 基本上,Fork-Join 將手頭的任務分解為多個小任務,直到該小任務足夠簡單,可以將其解決而無需進一步拆分。 這就像分而治之的算法。 在此框架中要注意的一個重要概念是,理想情況下,沒有工作線程處于空閑狀態。 他們實現了一種工作竊取算法,即閑置的工作器從忙碌的工作器那里竊取了工作。 它基于 Java 并發性思想領袖 Doug Lea 的工作。 Fork/Join 處理線程的麻煩; 您只需要向框架指出可以分解并遞歸處理的部分。 它采用偽代碼(摘自 Doug Lea 關于該主題的論文): ```java Result solve(Problem problem) { if (problem is small) directly solve problem else { split problem into independent parts fork new subtasks to solve each part join all subtasks compose result from subresults } } ``` ## 使用`WatchService`自動重新加載 每個應用程序都有一些配置,預期配置文件中的每次更改都會刷新該配置。 解決該問題的過去方法包括擁有一個線程,該線程根據配置文件的“最新更新時間戳”定期輪詢文件更改。 現在使用 Java 7,情況已經改變。 Java 7 引入了一項出色的特性:`WatchService`。 `WatchService`是 JDK 的內部服務,監視注冊對象的更改。 這些注冊的對象必定是`Watchable`接口的實例。 向`WatchService`注冊`Watchable`實例時,我們需要指定我們感興趣的更改事件的類型。 鏈接的文章中提供了`WatchService`的示例用法。 ## G1 垃圾收集器 JDK 7 引入了一個稱為 G1 的新垃圾收集器,它是垃圾的縮寫形式。 G1 垃圾收集器在垃圾最多的地方執行清理。 為此,它將 Java 堆內存劃分為多個區域,而不是 Java 7 版本之前的 3 個區域(新舊空間)。 G1 完全可以預測,并且可以為內存密集型應用程序提供更高的吞吐量。 這就是此快速摘要的全部內容。 您可以在此鏈接中找到特性的完整列表。 學習愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看