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://www.jianshu.com/p/38985b61ea83

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet.Applet 简单实现!~ 网页表格组件 GWT Advanced Table GWT Advanced Table 是一个基于 GWT 框架的网页表格组件,可实现分页数据显示、数据排序和过滤等功能! Google Tag Library 该标记库和 Google 有关。使用该标记库,利用 Google 为你的网站提供网站查询,并且可以直接在你的网页里面显示搜查的结果。 github-java-api github-java-api 是 Github 网站 API 的 Java 语言版本。 java缓存工具 SimpleCache SimpleCache 是一个简单易用的java缓存工具,用来简化缓存代码的编写,让你摆脱单调乏味的重复工作!1. 完全透明的缓存支持,对业务代码零侵入 2. 支持使用Redis和Memcached作为后端缓存。3. 支持缓存数据分区规则的定义 4. 使用redis作缓存时,支持list类型的高级数据结构,更适合论坛帖子列表这种类型的数据 5. 支持混合使用redis缓存和memcached缓存。可以将列表数据缓存到redis中,其他kv结构数据继续缓存到memcached 6. 支持redis的主从集群,可以做读写分离。缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于【自动提示】的需要(如:Google搜索), 而开发的架构无关的公共控件, 以满足该类需求可以通过快速配置来开发。AutoTips基于搜索引擎Apache Lucene实现。AutoTips提供统一UI。 WAP浏览器 j2wap j2wap 是一个基于Java的WAP浏览器,目前处于BETA测试阶段。它支持WAP 1.2规范,除了WTLS 和WBMP。 Java注册表操作类 jared jared是一个用来操作Windows注册表的 Java 类库,你可以用来对注册表信息进行读写。 GIF动画制作工具 GiftedMotion GiftedMotion是一个很小的,免费而且易于使用图像互换格式动画是能够设计一个有趣的动画了一系列的数字图像。使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用程序)。 重复文件检查工具 FindDup.tar FindDup 是一个简单易用的工具,用来检查计算机上重复的文件。 OpenID的Java客户端 JOpenID JOpenID是一个轻量级的OpenID 2.0 Java客户端,仅50KB+(含源代码),允许任何Web网站通过OpenID支持用户直接登录而无需注册,例如Google Account或Yahoo Account。 JActor的文件持久化组件 JFile JFile 是 JActor 的文件持久化组件,以及一个高吞吐量的可靠事务日志组件。 Google地图JSP标签库 利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth 1.0a 和 OAuth 2.0 的框架,提供了简单的方式通过社交媒体进行身份认证的功能。 Eclipse的JavaScript插件 JSEditor JSEditor 是 Eclipse 下编辑 JavaScript 源码的插件,提供语法高亮以及一些通用的面向对象方法。 Java数据库连接池 BoneCP BoneCP 是一个高性能的开源java数据库连接池实现库。它的设计初衷就是为了提高数据库连接池的性能,根据某些测试数据发现,BoneCP是最快的连接池。BoneCP很小,只有四十几K
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值