【JAVA】Java 5,6,7,8,9,10,11新特性吐血总结

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。

参考链接:

全部评论
更多博客请移步https://blog.csdn.net/qq_33591903
点赞 回复 分享
发布于 2020-03-24 16:53

相关推荐

牛马43373018...:这人真懂什么叫熵吗
点赞 评论 收藏
分享
04-26 14:36
已编辑
郑州信息科技职业学院 Java
由于高考成绩不是很理想,听取了张雪峰老师的建议,优先选了专业并且当时的想法就是选一个能赚钱的专业,于是最终选择了报了一个能收留我的有计算机专业的学校。当时听张雪峰老师说河南的学习氛围很好,所以就想去体验一下,事实雀食如张雪峰老师所说,大家都一股脑的铺在学习这条路上。可能是因为那边氛围导致的吧,我一开始想的也是卷学习卷绩点,所以大一的时候就一直在学习硬试教育的一些东西,学期结束了,排名出来的时候中上水平吧,据我了解保研的只有前5名可能会有机会,当时的心里就想着,我这成绩再卷也卷不到哪去了,并且保研也无望了,总结的说,一些事情只有真正做了才知道是不是自己所追求的。说了很多废话吧,剩下的关于学校的就长话短说了吧。大二很多专业课基本上要从早八上到晚上,但基本上我都是不去,不如自学现在新媒体技术这么发达,并且还可以学一下自己需要的技术栈,由于学校的课程原因对其他的技术栈不是很了解,所以,一心就投入在Java这个方向了,但是,Python也会学一下,这是因为加入实验室,实验室老师是做人工智能方向的缘故。现在回想,我大二当时还是学的太慢了,还有就是信息差太大了,出来工作之后才发现有些佬们已经大二就出来实习,并且八股就背的滚瓜烂熟了。只能说这里的学习氛围很好吧,走廊里都是背书刷题的声音,跟身边的同学和实验室的同学谈是否直接就业的事,他们要么都是说考研,要么对直接就业很含糊,可能是因为觉得自己学的还不够吧,我想说,学的不够就干中学呗,反正,我先迈出去这步再说。到了大三上还是没有找工作的打算,因为身边的人也都还没有这个意识吧,现在跟了身边的同事聊天才知道,我的信息差太大了。到了大三下刚开始,我才开始正式的踏上求职路,当时的信息差还是很大的,根本就不敢碰瓷大厂,想着有一个公司能要再说吧,并且地域也限制的很死,只想着在本地找一下,因为怕学校找事(我想这是学校一贯操作了),在本地吧,他们大多数都是接受的线下面,一开始面了一个,可能自己比较摆也很悲观,就显得我很差吧,hr面完就没后续了,最终终于有一个面,并且也展示出自己的自信和对专业的理解了,最后,我也没想着这么多背调公司呀,当个备选什么的就直接去了。也算是我的第一家正式的公司吧(之前都是线上的码农兼职),干多了就发现,这个公司压根学不到东西,并且薪资低的,因为我是第一个进来的计算机实习生,有一个同事干了两三年的吧,带着我做的时候是真能学到东西,但是,最后那个同事离职了,我就只能和学艺术的老板直接汇报项目进度,一个学艺术的来指导我这个科班出身的就很离谱的好吧。最后,我也离职了,也跟前同事聊了很久,她说我是她见过大三就能学到这程度,已经超过很多人了,并且她当时在的时候还说我是内定能转正的。并且还说我真的可以去考研。我也仔细思考了一下,我决定让自己沉淀一下再出发吧,先备考了软件设计师,然后期末考,大三暑期的时候就充实自己的简历,并且也认识了一个某东的老哥,也用了内推码,教我了怎么写好简历量化成果之类的,总之,很感谢一路走来帮助我的人吧,并且我在边充实自己的同时也在边投递简历,但当时卡的也很死,要选base地在河南附近的,不像现在全国可飞。面了很多base地在学校附近的,然后,还有一个北京的py和杭州的java,最终就这两个地方给了offer,但是都是实习转正的,不是秋招offer,因为觉得Java的太卷了,然后,面试的时候也会感觉压力很大,所以就把杭州的那个拒了,去了北京的,北京是免费住的房子(三个月这是伏笔),当时觉得环境很好,但是合租室友的作息跟自己的作息不一样就很不习惯,于是,我就想着要是三个月后我一定要找一个单间的哪怕破一点。北京这个公司吧就很像国企的感觉,早九晚五,当月发当月工资,并且干的活接触的数据量都不是很大,就是干了很多杂活,并且mentor和部门的领导都不是技术出身,所以,我能学到的东西少之又少,但是吧,学习是自己的事,而且这部门不是很忙对于实习生来说,我完全可以学自己的东西(前提是不被发现)。到最后这个部门的氛围就很微妙,我遇到不会的问他们我应该怎么做的时候,他们说让我自己想,我当时就想说,神人一个,啥都不说让我自己干,干出来又不满意,你说你让我干py的东西你不会我就不说啥了,让我干无关代码的东西,让我调研项目应该做些什么内容,现在回想都是泪呀,我就这样被欺压的过完了三个月,最后免费住的地方也到期了,伏笔来了,最后,找我谈话说你技术可以了能看出来,因为你也自己独立完成了消息通知那一块内容嘛,但是,由于我们部门干的活比较杂并且我也缺少一些电力相关的一些知识,所以,觉得不合适。(OS:其实我对每一份工作都是真心换真心的,并且这些电力知识我也知道我有一点欠缺所以我也有自己再学习,你们啥也不教我,最后把屎盆子把我头上扣)最后,回到了学校,心态也发生了变化,想着做啥都不如找一个稳定的工作重要,想着回家沉淀吧,少年终有出头日。但是,计划赶不上变化,之前那个同事,内推了我去她现在的公司,并且是做AI应用的也是我想接触的,并且还是与我上家的业务场景类似的,真的感谢那个同事,俗话说:千里马常有而伯乐不常有。并且那里的部门领导也很好,并且说我虽然不是电力相关出身的,但是能做的这样已经很不错了,所以DDDD,由于各种不可抗力因素吧,还是想找一个离家近,然后不是很像小作坊的感觉(这个公司虽然比较小,但是比之前那个大的公司的氛围和待遇一点都不差的好吧甚至更好)。最终,在学校也呆了一个月吧,也陆陆续续面了一个月有一个C厂的面答的都挺好直接就谈薪了,但是风评不好还是保命要紧,还有各种的中小厂面吧,但感觉都不是自己想要的,只是想刷刷面试经验吧(这是某东哥告诉我的,与其一直改简历不如去多面)。最后,在校期间面了一个比较合适的某鸦智能,一直推进到了HR面,但是最后被横向了,开始复盘,被横向了属实是没招了,经历了这么多大风大浪什么场面没见过。过年期间,求职路线关闭,把自己缺少的技术栈和简历中的项目业务理清楚说明白。年过完就要开始加入找工作大军中了,把节前没面完的先面了,节后一开始就是某鸟的HRG面,聊的就很憋屈的感觉,问我技术方面的,说我说的很像AI的(我心想跟你说具体的细节你又说我不想听技术的,说的比较宽泛浅显说我AI)。最后,反正体验感不是很好的结束了吧。说一个星期等通知,等了两个星期才说是通过的(我认为是排名靠前的那些人没去,顺位到我了)。那你既然这样说了,那我就接受吧。还没入职就问我要身份证信息要这要那的,最后都给过去了,说HC调整,要重新review,又又又一次被恶心到了。后面就是陆续的沉淀面试等,我当时的重心已经完全的想着私企没人要,就去试试考公和考央国企了,毕竟我的履历不看学历的话放到电网当中还是可以的。私企的话有一个外企洋里洋气的说话,问我怎么口语这么好?我说这叫智取,宝贝。虽然这个tek外企过了,但是还有一个openday要去线下,来回的衣食住行不是很方便也不是很想去所以就拒绝了没去。后来就收到了,国网网申通过的通知,说实话,我之前问了很多我们学校历年有没有考央国企之类的案例,很显然都不知道,也可以说少之又少吧,于是我就奔赴京城进京赶考,唉,时间不太合适就想着算了吧,再等等,好事多磨,宁缺毋滥吧。金三银四终于等来了面试的机会,这个岗位我只能说我不是很熟悉,但是语言这东西吧都是相通的,重要的是我要把其中的内核搞懂,梳理清楚业务逻辑。最终,来到了这家公司,目前来说是我遇到过最好的了,能有hc且不是要通过实习评估的那种,并且合同期限是三年的,并且是12%的公积金。我认为这就是我所遇到的最好的了。希望能真心换真心吧,不再把我当创口贴/路边一条了,并且也遇到了很多优秀的同事。总的来说,就是要是能重来我要选李白。我肯定会打破这些信息差,后悔知道的太晚,并且跟优秀的人聊天说话真的可以学到很多东西,之前上文提到的贵人就不说了,说说最近的,他是跟我一届,学校后缀甚至不如我的后缀,但是真正了解的才会知道真是佬👍,他跟我找工作的时间线差不多,但是他在中大厂甚至大厂都呆过,因为跟他聊了才知道我当时的信息差有多大,并且毅力也是我甚至…都没有的。并且也听说了他们学校找工作的氛围很好,不像我阿巴阿巴阿巴,只有考研等相关的一些。并且说的一些观点都是很认同的。总之,希望能在这好好的吧,我真的不想经历大起大落了。经历了,打招呼挂,简历挂,一面挂,HR面挂,offer挂的,现在的心态已经放宽了很多了,但是难过还是有的,希望这家公司诚不欺我吧。也祝大家遇到自己的梦中情厂
选择和努力,哪个更重要?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务