更多課程 選擇中心
        Java培訓

        400-111-8989

        Java培訓 > Java教程  > 正文

        關于 Java 10 你可能不知道的 5 件事

        • 發布:Java培訓
        • 來源:Java教程
        • 時間:2018-05-04 11:39

        局部變量類型推斷是有爭議的熱點,但Java 10在JVM中的垃圾收集和容器識別上帶來了可喜的變化。

        關于本系列

        所以你認為你了解Java編程? 事實是,大多數開發人員只是浮于Java平臺的表面上,僅僅為了完成工作而學習。在這個正在進行的系列中,Java技術深入挖掘了Java平臺的核心功能,提出了一些技巧和訣竅,可以幫助你解決即使是最棘手的編程挑戰。

        Java?開發人員已經習慣了等待新的Java版本發布,但是新的、高頻率的發布節奏改變了這一情況。Java 9出現之后僅僅過去6個月,現在Java 10已經在敲門了。再過6個月,我們將迎來Java 11。一些開發人員可能會發現這樣的快速發布是多余的,但是新的節奏標志著一個長期需求的改變。

        與它的版本號一樣,Java 10提供了10個新特性,本文提供了我認為最重要的5個特性(您可以在Open JDK 10項目頁面上查看它們)。

        1. Java的新版本節奏

        從歷史上看,JDK發行的節奏是由大的新特性驅動的。作為最近的例子,Java 8以lambda和流的形式引入了函數式編程,而Java 9引入了模塊化Java系統。每個新版本都被熱切地期待著,但是次要的修復程序經常束之高閣,等待更大的組件版本被最終確定。Java的進化落后于其他語言。

        新的高頻節奏將Java以更小的增量向前推進。在發布日期準備好的特性將被包括在內,而那些不能被安排在下一個版本中,就在6個月之后。在這個新周期下的第一個Java版本是Java 9,它于2017年10月發布。Java 10于2018年3月發布,Java 11將于2018年9月發布。

        作為新節奏的一部分,甲骨文表示,它將只支持每個主要版本,直到下一個主要版本發布為止。 當Java 11發布時,Oracle將停止支持Java 10。支持Java版本的開發人員必須每6個月遷移一次主要版本。 不希望或不需要頻繁遷移的開發人員可以使用LTS(長期支持)版本,該版本每三年更新一次。 目前的LTS版本Java 8將在今年秋季發布Java 11之前得到支持。

        2. 局部變量類型推斷

        局部變量類型推斷是Java 10中最顯著的特性。在進入JDK 10之前,爭論非常激烈,該特性允許編譯器推斷局部變量的類型,而不是要求程序員明確指定它。

        清單1 顯示了如何在Java 10之前定義一個String變量類型。

        清單1.聲明并分配一個String類型的變量

        關于 Java 10 你可能不知道的 5 件事

        清單2展示了在Java10中定義與String類型相同的變量

        清單2.用局部變量類型推斷String類型的變量

        關于 Java 10 你可能不知道的 5 件事

        正如你看到的,唯一的區別就是使用了var保留類型名稱。使用右邊的表達式,編譯器可以將變量名的類型推斷為String。

        這看起來有點簡單,讓我們來看一個更加復雜的例子。如果一個變量分配給了調用方法的返回值是怎樣的?在這種情況下,編譯器可以根據方法的返回類型推斷變量的類型,如清單3所示。

        清單3.從返回類型推斷String類型

        關于 Java 10 你可能不知道的 5 件事

        使用局部變量類型

        顧名思義,局部變量類型推斷功能僅適用于局部變量。 它不能用于定義實例或類變量,也不能用于方法參數或返回類型。 但是,您可以在類和增強型循環中使用var,可以從迭代器中推斷出類型,如清單4所示。

        清單4.在循環中使用var

        關于 Java 10 你可能不知道的 5 件事

        使用這種類型的最明顯的原因是為了減少代碼中的冗長。 看看清單5中的示例。

        清單5.很長的類型名稱使得代碼很長

        關于 Java 10 你可能不知道的 5 件事

        清單6中的類型聲明是垂直排列的,并且在構造函數調用的右側每個申明中都會提到一次類型。 想象一下使用這種類型在一些Java框架中常見的長類名的好處。

        局部變量類型的問題

        1. var掩蓋了類型

        你已經看到了var如何提高代碼的可讀性,但是從另一方面來看,它也可以掩蓋它。 看看清單7中的示例。

        清單7.返回類型不清楚

        關于 Java 10 你可能不知道的 5 件事

        在清單7中,我們必須猜測返回類型。 讓讀者猜測發生了什么的代碼是難以維護的。

        2. var不能與lambda一起使用

        與lambda表達式一起使用時,類型推斷效果不佳,主要原因是編譯器缺少類型信息。 清單8中的lambda表達式不會被編譯。

        清單8.類型信息不足

        關于 Java 10 你可能不知道的 5 件事

        在清單8中,編譯器的右邊表達式中沒有足夠的類型信息來推斷變量類型。 Lambda語句必須始終聲明一個顯式類型。

        3. var不會與菱形操作符混在一起

        與菱形操作符一起使用時,類型推斷也不能很好地工作。 看看清單9中的例子。

        清單9.使用帶有var的菱形運算符

        關于 Java 10 你可能不知道的 5 件事

        親自嘗試一下

        想要親自嘗試本地變量類型推斷,您需要下載JDK 10和一個支持它的IDE。 IntelliJ的EAP(Early Access Program)版本具有此支持。 一旦你下載并安裝了它,你可以從本文附帶的GitHub存儲庫中檢出代碼開始。 你會在那里找到局部變量類型推斷的例子。

        在代碼清單9中,books的ArrayList的參數類型是什么呢?你可能明白你是希望ArrayList存儲一個書的列表,但是編譯器不能推斷出來。反之,編譯器會做的唯一它能做的事情,就是推斷出來這是一個參數是Object類型ArrayList:ArrayList ()。

        另外一種方法就是在右端表達式中的菱形運算符中定義具體類型。然后你可以讓編譯器從而推斷出來變量的類型,就像在代碼清單10中寫的一樣。或者使用另外一種方式,即你必須明確地以傳統方式聲明變量:List books。事實上,你可能更喜歡這種方式,因為它能讓你定義一個抽象類型,并對List接口編程:

        清單10. 定義出具體類型

        關于 Java 10 你可能不知道的 5 件事

        3、增加、刪除和棄用

        刪除

        Java 10刪除了很多工具:

        命令行工具javah,可以使用javac -h代替。

        命令行選項-X:prof,盡管可以使用jmap工具來訪問分析信息。

        政策工具。

        一些從Java1.2開始標記的為已棄用的API也被永久刪除了。包括java.lang.SecurityManager.inCheck字段和以下方法:

        java.lang.SecurityManager.classDepth(java.lang.String)

        java.lang.SecurityManager.classLoaderDepth()

        java.lang.SecurityManager.currentClassLoader()

        java.lang.SecurityManager.currentLoadedClass()

        java.lang.SecurityManager.getInCheck()

        java.lang.SecurityManager.inClass(java.lang.String)

        java.lang.SecurityManager.inClassLoader()

        java.lang.Runtime.getLocalizedInputStream(java.io.InputStream)

        java.lang.Runtime.getLocalizedOutputStream(java.io.OutputStream)

        棄用

        JDK 10也棄用了一些API。 java.security.acl包已標記為已棄用,也包括java.security包中包含各種相關的類(Certificate,Identity,IdentityScope,Singer,auth.Policy)。

        此外,javax.management.remote.rmi.RMIConnectorServer類中的CREDENTIAL_TYPES被標記為不建議使用。 java.io.FileInputStream和java.io.FileOutputStream中的finalize()方法已被標記為已棄用。所以在java.util.zip.Deflater / Inflater / ZipFileclasses中的finalize()方法也被棄用。

        添加和包含

        作為Oracle JDK和Open JDK正在進行對接的一部分,Open JDK現在包含Oracle JDK中可用的一部分根證書頒發機構。這些包括Java Flight Recorder和Java Mission Control。此外,JDK 10在java.text,java.time和java.util包的適當位置中增加了對BCP 47語言標記的Unicode擴展的增強支持。另一項新功能允許在不執行全局VM安全點的情況下執行線程回調。這使停止單個線程既可行又便宜,而不是要求你停止所有線程或不需要任何線程。

        4.提高容器意識

        如果你部署到像Docker這樣的容器,那么這個功能特別適合你。 現在JVM意識到它正在容器中運行,并查詢容器中可用處理器的數量,而不是查詢主機操作系統。 也可以從外部附加到在容器中運行的Java進程,這使監視JVM進程變得更加容易。

        以前,JVM不知道它的容器,并會向主機操作系統詢問活動CPU的數量。 在某些情況下,這會導致JVM過度報告資源,導致多個容器在同一操作系統上運行時出現問題。 在Java 10中,您可以將容器配置為使用主機操作系統的CPU的子集,并且JVM將能夠確定正在使用的CPU數量。 您還可以使用-XX:ActiveProcessorCount標志明確指明能夠看到的容器化JVM處理器數量。

        5.應用程序類數據共享

        此特性的用途是提高運行間和多個運行相同代碼的JVM啟動時間,同時減少內存占用量。 這通過在JVM之間共享關于類的元數據來實現。 JVM的第一次運行收集并歸檔有關它所加載的類的數據。 然后它將數據文件提供給其他JVM以及該JVM的后續運行,從而節省JVM初始化過程中的時間和資源。 類數據共享實際上已經有一段時間了,但僅限于系統類。 現在這個功能已經擴展到包含所有的應用程序類。

        結束語

        Java10中頭號特性是把Var作為了新的類型名,它可以讓代碼更加簡潔和清晰。但是,如果使用不謹慎也會掩蓋住原來的含義和意圖。當不明確含義的時候,IDE或許可以幫助你辨別類型,但是在一個IDE中無法讀取所有類型的代碼。我們經常通過GitHub倉庫、調試器或者代碼審查工具在線閱讀代碼。開發者使用這個新的特性時,務必注意為了將來的讀者和維護人員提高代碼可讀性。

        Java的新版本如此高頻率發布是一個值得歡迎的改變。在發布日期,已經準備好的特性必須發布,那些延遲的特性將在短暫的調整之后再下個版本發布。新的循環將加快java的發展進程,那些已經開發完成并且已經列出來的特性,開發者不需要等好多年。

        從一個主要版本到下一個主要版本的發布的支持時間越來越短,這帶來一些合理的擔憂,但是LTS應該可以有效的緩解該問題。發布疲勞是另一個風險,因為開發者對頻繁的版本更新感到厭煩。總的來說,我認為這是一個積極的行為,在未來很長的一段時間里,它有助于保證java的活躍度和維持java的發展。

        感謝大家閱讀由Java教程分享的“關于 Java 10 你可能不知道的 5 件事”希望對大家有所幫助,更多精彩內容請關注Java培訓官網

        免責聲明:本文由小編轉載自網絡,旨在分享提供閱讀,版權歸原作者所有,如有侵權請聯系我們進行刪除

        預約申請免費試聽課

        填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

        上一篇:學java就兩個問題
        下一篇:如何學習一門編程語言
        12大要點讓你的Java開發所向披靡~

        12大要點讓你的Java開發所向披靡~

        學習Java最好的12本免費在線電子書

        學習Java最好的12本免費在線電子書

        Java常用日志框架介紹

        Java常用日志框架介紹

        一篇文章了解RPC框架原理

        一篇文章了解RPC框架原理

        • 掃碼領取資料

          回復關鍵字:視頻資料

          免費領取 達內課程視頻學習資料

        • 視頻學習QQ群

          添加QQ群:1143617948

          免費領取達內課程視頻學習資料

        Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

        選擇城市和中心
        貴州省

        福建省

        • 達內廈門軟件園中心
        廣西省

        海南省

        国产高清情侣视频2019年,限制电影福利在线观看,23伊人大香蕉 百度 好搜 搜狗
        <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>