Java 5,6,7,8,9,10新特性吐血總結(jié)

作者:lkd_whh

轉(zhuǎn)載請注明出處

java5

  1. 泛型 (Generics)

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

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

  4. 枚舉(Typesafe Enums)。

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

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

    語法:(type... arguments)

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

         /**
         * 可變參數(shù)測試
         *
         * @param args
         */
        public static void testVarargs(String... args) {
            //本質(zhì)就是個數(shù)組
            System.out.println(args[1]);
            for (String arg : args) {
                System.out.println(arg);
            }
        }
    

    ?

  2. 靜態(tài)導入(Static Import)??梢灾苯油ㄟ^import類來使用類里的靜態(tài)成員(變量和方法)。

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

    ps:過去的版本中只能通過繼承類或?qū)崿F(xiàn)接口才能使用。

  3. 注解(Annotations)。關(guān)鍵字@interface。

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

    ?

  4. 新的線程模型和并發(fā)庫(java.util.concurrent)。

java6

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

java7

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

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

    //數(shù)字間的下劃線不影響實際值
     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<>();        // 現(xiàn)在
    
  2. try-with-resources語句。

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

java8

  1. lambada表達式(Lambda Expressions)。Lambda允許把函數(shù)作為一個方法的參數(shù)(函數(shù)作為參數(shù)傳遞進方法中)。
  2. 方法引用(Method references)。方法引用提供了非常有用的語法,可以直接引用已有Java類或?qū)ο螅▽嵗┑姆椒ɑ驑?gòu)造器。與lambda聯(lián)合使用,可以使語言的構(gòu)造更緊湊簡潔,減少冗余代碼。
  3. 默認方法(Default methods)。默認方法允許將新功能添加到庫的接口中,并確保兼容實現(xiàn)老版本接口的舊有代碼。
  4. 重復注解(Repeating Annotations)。重復注解提供了在同一聲明或類型中多次應用相同注解類型的能力。
  5. 類型注解(Type Annotation)。在任何地方都能使用注解,而不是在聲明的地方。
  6. 類型推斷增強。
  7. 方法參數(shù)反射(Method Parameter Reflection)。
  8. Stream API 。新添加的Stream API(java.util.stream) 把真正的函數(shù)式編程風格引入到Java中。Stream API集成到了Collections API里。
  9. HashMap改進,在鍵值哈希沖突時能有更好表現(xiàn)。
  10. Date Time API。加強對日期和時間的處理。
  11. java.util 包下的改進,提供了幾個實用的工具類。
    • 并行數(shù)組排序。
    • 標準的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).
    • 方法調(diào)用的字節(jié)碼指令支持默認方法。

java9

  1. java模塊系統(tǒng) (Java Platform Module System)。
  2. 新的版本號格式。$MAJOR.$MINOR.$SECURITY.$PATCH
  3. java shell,交互式命令行控制臺。
  4. private instance methods方法上可以使用@SafeVarargs注解。
  5. diamond語法與匿名內(nèi)部類結(jié)合使用。
  6. 下劃線不能用在變量名中。
  7. 支持私有接口方法(您可以使用diamond語法與匿名內(nèi)部類結(jié)合使用)。
  8. Javadoc
    • 簡化Doclet API。
    • 支持生成HTML5格式。
    • 加入了搜索框,使用這個搜索框可以查詢程序元素、標記的單詞和文檔中的短語。
    • 支持新的模塊系統(tǒng)。
  9. JVM
    • 增強了Garbage-First(G1)并用它替代Parallel GC成為默認的垃圾收集器。
    • 統(tǒng)一了JVM 日志,為所有組件引入了同一個日志系統(tǒng)。
    • 刪除了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是一個保留類型名稱,而不是關(guān)鍵字。所以之前使用var作為變量、方法名、包名的都沒問題,但是如果作為類或接口名,那么這個類和接口就必須重命名了。

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

    • 本地變量初始化。
    • 增強for循環(huán)中。
    • 傳統(tǒng)for循環(huán)中聲明的索引變量。
    • Try-with-resources 變量。

參考鏈接:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 作者:拔劍少年簡書地址:http://www.itdecent.cn/u/dad4d9675892博客地址:ht...
    lkd_whh閱讀 16,685評論 12 233
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,637評論 18 399
  • 前幾天我和姥爺一起去看的花燈,有很多各種各樣的花燈
    李迎奧閱讀 307評論 0 0
  • 20) 李碧華的《青蛇》妖得很。 21) 許久不動筆。花5個小時,寫5句開場白。 22) 以前總喜歡花20%的精力...
    安的烈閱讀 297評論 0 0
  • 堅定自己的立場,同理別人的感受。估計這就是化解關(guān)系中的壞的抱持方式吧。 所謂投射性認同,估計大家都不陌生,你可能不...
    尹二尹閱讀 1,180評論 0 0

友情鏈接更多精彩內(nèi)容