Java 5,6,7,8,9,10,11新特性吐血總結

作者:拔劍少年

簡書地址:http://www.lxweimin.com/u/dad4d9675892
博客地址:https://it18monkey.github.io
轉載請注明出處

java5

  1. 泛型 (Generics)

     List<Integer> list=new ArrayList<Integer>();
    
  2. 增強循環(Enhanced for Loop)

     int[] array = {1, 2, 3, 4, 5};
     for (int i : array) {
        System.out.println(i);
     } 
    
  3. 自動封箱拆箱(Autoboxing/Unboxing )。八大基本類型和它們的包裝類能夠自動的相互轉換。

  4. 枚舉(Typesafe Enums)。

    ps:枚舉是一種實現線程安全的單例模式的好方式。

     enum TestEnum{
            one,
            two;
            TestEnum() {
            }
        }
    
  5. 可變參數 (Varargs)

    語法:(type... arguments)

    可變參數本質仍然是用一個數組存儲參數,只是java隱藏了這一過程。需要注意的是如果一個方法聲明中含有可變參數,那必須放在最后一個位置。

         /**
         * 可變參數測試
         *
         * @param args
         */
        public static void testVarargs(String... args) {
            //本質就是個數組
            System.out.println(args[1]);
            for (String arg : args) {
                System.out.println(arg);
            }
        }
    
  6. 靜態導入(Static Import)。通過import類來使用類里的靜態變量或方法(直接通過名字,不需要加上類名.),簡化了代碼的書寫。

    //單個導入
    import static java.lang.Math.PI;
    //批量導入
    import static java.lang.Math.*;
    

    ps:過去的版本中只能通過繼承類或實現接口才能使用。

  7. 注解(Annotations)。關鍵字@interface

    //注釋注解的注解又叫做元注解
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    public @interface MyAnnotations {
        //注解內可以添加方法,也可以不添加
        //注解方法的返回值只能是基本類型,String,Class類,枚舉,注解,可以有默認值。
        int id();
        String name() default "whh";
        Class classType();
        TestEnum enumType();
    }
    
    
  8. 新的線程模型和并發庫(java.util.concurrent)。

java6

  1. 集合框架增強。
  • 為了更好的支持雙向訪問集合。添加了許多新的類和接口。
  • 新的數組拷貝方法。Arrays.copyOfArrays.copyOfRange
//以下為添加的新接口和類
Deque,BlockingDeque,NavigableSet,NavigableMap,ConcurrentNavigableMap,ArrayDeque, ConcurrentSkipListSet ,ConcurrentSkipListMap,ConcurrentSkipListMap ,AbstractMap.SimpleEntry ,AbstractMap.SimpleImmutableEntry
  1. Scripting. 可以讓其他語言在java平臺上運行。 java6包含了一個基于Mozilla Rhino實現的javascript腳本引擎。
  2. 支持JDBC4.0規范。

java7

  1. 二進制前綴0b或者0B。整型(byte, short, int, long)可以直接用二進制表示。

      //二進制字面值前綴0b 或0B
        int i = 0b010;//10進制值為2
        int j = 0B010;
    
  2. 字面常量數字的下劃線。用下劃線連接整數提升其可讀性,自身無含義,不可用在數字的起始和末尾。

    //數字間的下劃線不影響實際值
     int k = 1_1;//值為11
  1. switch 支持String類型。
  1. 泛型實例化類型自動推斷。

    Map<String, List<String>> myMap = new HashMap<String, List<String>>();    // 之前
    Map<String, List<String>> myMap = new HashMap<>();        // 現在
    
  2. try-with-resources語句。

       /*
         * 聲明在try括號中的對象稱為資源,在方法執行完畢后會被自動關閉,相對與之前必須在finally關閉資源,這一特性大大提高了代碼的簡潔性。
         * 所有實現java.lang.AutoCloseable接口的類都作為資源被自動關閉。
        */
       try (BufferedReader reader=new BufferedReader(new FileReader("d:1.txt"))){
          return reader.readLine();
      }
  1. 單個catch中捕獲多個異常類型(用| 分割)并通過改進的類型檢查重新拋出異常。

java8

  1. lambada表達式(Lambda Expressions)。Lambda允許把函數作為一個方法的參數(函數作為參數傳遞進方法中)。
  2. 方法引用(Method references)。方法引用提供了非常有用的語法,可以直接引用已有Java類或對象(實例)的方法或構造器。與lambda聯合使用,可以使語言的構造更緊湊簡潔,減少冗余代碼。
  3. 默認方法(Default methods)。默認方法允許將新功能添加到庫的接口中,并確保兼容實現老版本接口的舊有代碼。
  4. 重復注解(Repeating Annotations)。重復注解提供了在同一聲明或類型中多次應用相同注解類型的能力。
  5. 類型注解(Type Annotation)。在任何地方都能使用注解,而不是在聲明的地方。
  6. 類型推斷增強。
  7. 方法參數反射(Method Parameter Reflection)。
  8. Stream API 。新添加的Stream API(java.util.stream) 把真正的函數式編程風格引入到Java中。Stream API集成到了Collections API里。
  9. HashMap改進,在鍵值哈希沖突時能有更好表現。
  10. Date Time API。加強對日期和時間的處理。
  11. java.util 包下的改進,提供了幾個實用的工具類。
    • 并行數組排序。
    • 標準的Base64編解碼。
    • 支持無符號運算。
  12. java.util.concurrent 包下增加了新的類和方法。
    • java.util.concurrent.ConcurrentHashMap 類添加了新的方法以支持新的StreamApi和lambada表達式。
    • java.util.concurrent.atomic 包下新增了類以支持可伸縮可更新的變量。
    • java.util.concurrent.ForkJoinPool類新增了方法以支持 common pool。
    • 新增了java.util.concurrent.locks.StampedLock類,為控制讀/寫訪問提供了一個基于性能的鎖,且有三種模式可供選擇。
  13. HotSpot
    • 刪除了 永久代(PermGen).
    • 方法調用的字節碼指令支持默認方法。

java9

  1. java模塊系統 (Java Platform Module System)。
  2. 新的版本號格式。$MAJOR.$MINOR.$SECURITY.$PATCH
  3. java shell,交互式命令行控制臺。
  4. private instance methods方法上可以使用@SafeVarargs注解。
  5. diamond語法與匿名內部類結合使用。
  6. 下劃線_不能單獨作為變量名使用。
  7. 支持私有接口方法(您可以使用diamond語法與匿名內部類結合使用)。
  8. Javadoc
    • 簡化Doclet API。
    • 支持生成HTML5格式。
    • 加入了搜索框,使用這個搜索框可以查詢程序元素、標記的單詞和文檔中的短語。
    • 支持新的模塊系統。
  9. JVM
    • 增強了Garbage-First(G1)并用它替代Parallel GC成為默認的垃圾收集器。
    • 統一了JVM 日志,為所有組件引入了同一個日志系統。
    • 刪除了JDK 8中棄用的GC組合。(DefNew + CMS,ParNew + SerialOld,Incremental CMS)。
  10. properties文件支持UTF-8編碼,之前只支持ISO-8859-1
  11. 支持Unicode 8.0,在JDK8中是Unicode 6.2

java10

  1. 局部變量類型推斷(Local-Variable Type Inference)

    //之前的代碼格式
    URL url = new URL("http://www.oracle.com/"); 
    URLConnection conn = url.openConnection(); 
    Reader reader = new BufferedReader(
        new InputStreamReader(conn.getInputStream()))
    //java10中用var來聲明變量
    var url = new URL("http://www.oracle.com/"); 
    var conn = url.openConnection(); 
    var reader = new BufferedReader(
        new InputStreamReader(conn.getInputStream()));
    

    var是一個保留類型名稱,而不是關鍵字。所以之前使用var作為變量、方法名、包名的都沒問題,但是如果作為類或接口名,那么這個類和接口就必須重命名了。

    var的使用場景主要有以下四種:

    • 本地變量初始化。
    • 增強for循環中。
    • 傳統for循環中聲明的索引變量。
    • Try-with-resources 變量。?
  2. Optional類添加了新的方法orElseThrow(無參數版)。相比于已經存在的get方法,這個方法更推薦使用。

java11

  1. 支持Unicode 10.0,在jdk10中是8.0。
  2. 標準化HTTP Client
  3. 編譯器線程的延遲分配。添加了新的命令-XX:+UseDynamicNumberOfCompilerThreads動態控制編譯器線程的數量。
  4. 新的垃圾收集器—ZGC。一種可伸縮的低延遲垃圾收集器(實驗性)。
  5. Epsilon。一款新的實驗性無操作垃圾收集器。Epsilon GC 只負責內存分配,不實現任何內存回收機制。這對于性能測試非常有用,可用于與其他GC對比成本和收益。
  6. Lambda參數的局部變量語法。java10中引入的var字段得到了增強,現在可以用在lambda表達式的聲明中。如果lambda表達式的其中一個形式參數使用了var,那所有的參數都必須使用var。

參考鏈接:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,716評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,746評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,991評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,706評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,036評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,203評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,725評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,451評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,677評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,857評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,266評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,606評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,407評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,643評論 2 380

推薦閱讀更多精彩內容