美文网首页技术干货
java 各版本新特性介绍

java 各版本新特性介绍

作者: 求索 | 来源:发表于2020-03-01 18:50 被阅读0次

java8 新特性

Java8 主要包括的新特性有:

  • 函数式接口
    如果一个接口只有一个抽象方法,那么该接口就成为一个函数式接口。同时java还配套引入@FunctionalInterface注解,
    该注解主要式用于强制表示一个接口必须是一个函数式接口,但是不是必须的。

      @FunctionalInterface
      public interface DemoFuncInterface1 {
           void apply();
      }
    
        public interface DemoFuncInterface2 {
             void apply();
        }
    
        public interface DemoFuncInterface3 {
             void apply();
             void apply2();
        }
    
        public interface DemoFuncInterface4 {
            default void apply() {}; 
        }
    

    上面4个例子中DemoFuncInterface1、DemoFuncInterface2都是
    函数式接口。但是第三个、第四个都不是,而且将@FunctionalInterface标记
    在第三、第四个上编译都会报错。

    使用函数式接口demo:

      public class testDemo{
          public void testFunc(DemoFuncInterface demoFuncInterface ,
                                 DemoFuncInterface2 demoFuncInterface2){
                demoFuncInterface.apply();
                demoFuncInterface2.apply();
          }
        
          public void testFuncError(DemoInterface demoInterface){
              demoInterface.apply(); 
          }
        
        public static void main(){
            Java8NewFeatures java8NewFeatures=new Java8NewFeatures();
            java8NewFeatures.testFunc(()->{},()->{
                int value= 100*100;
            });
    
            //java8NewFeatures.testFuncError(()->{});
        }
    }
    

    可以看到非函数式接口是不允许使用lambda表达式作为初始化直接传入的。

  • Lambda表达式支持

    函数式接口的重要属性是:我们能够使用 Lambda 实例化它们,Lambda 表达式让你能够将函数作为方法参数,或者将代码作为数据对待。

    在java8之前要做类似跟踪效果,我们一般使用内部类或事件处理机制实现。lambda表达式优化
    了开发性能。在Andriod开发过程中,这个现象比较严重。到处都是内部类。

    lambda表达式的写法:

    (parameters) -> expression

    针对复杂业务可以使用方法块:

    (parameters) -> { expression }

  • 接口的增强
    在java8之前接口只能定义抽象方法,java8 添加了默认实现、静态方法等的支持。

     public interface DemoInterface {
      default int apply(){
         return DEMO_ARG;
      }
    
      Integer DEMO_ARG=1;
    
      public static Integer applyStatic(){
    
         return DEMO_ARG *100;
      }
    }
    
  • 集合的流式计算
    stream api 很多人都用过,具体如:

      public class Demo{
        public void test(){
            List<String> list=new LinkedList<>();
            list = list.stream().filter(x-> StringUtils.isEmpty(x)).collect(Collectors.toList());
            list.forEach((x)->{
                //do somethings
            });
            list.parallelStream().forEach((x)->{
                //todo somethings
            });
        }
    }
    

    流式计算计算包括stream、和parallelStream。其实现本质是在Collection接口上扩展了两套API接口。

  • 新的日期时间类(Date/Time API)
    JDK8.0之后, 新增加了以下几个类用来表示日期时间

    • LocalDate 用来表示日期(年、月、日)
    • LocalTime 用来表示时间(时、分、秒)
    • LocalDateTime 用来表示日期时间(年、月、日、时、分、秒)
    • DataTimeFomatter 用来格式化日期.

    比如本地当前时间获取:

    public void testNow(){ 
        LocalDate now = LocalDate.now();
        System.out.println(now); 
    }
    

java8 升级还包括nio优化、安全机制升级、Base64编码引入等其它特性,有兴趣的可以区研究一下。

java9 新特性

参考地址!(https://www.runoob.com/java/java9-new-features.html)

  • 模块系统:模块是一个包的容器,Java 9 最大的变化之一是引入了模块系统(Jigsaw 项目)。
  • REPL (JShell):交互式编程环境。
  • HTTP 2 客户端:HTTP/2标准是HTTP协议的最新版本,新的 HTTPClient API 支持 WebSocket 和 HTTP2 流以及服务器推送特性。
  • 改进的 Javadoc:Javadoc 现在支持在 API 文档中的进行搜索。另外,Javadoc 的输出现在符合兼容 HTML5 标准。
  • 多版本兼容 JAR 包:多版本兼容 JAR 功能能让你创建仅在特定版本的 Java 环境中运行库程序时选择使用的 class 版本。
  • 集合工厂方法:List,Set 和 Map 接口中,新的静态工厂方法可以创建这些集合的不可变实例。
  • 私有接口方法:在接口中使用private私有方法。我们可以使用 private 访问修饰符在接口中编写私有方法。
  • 进程 API: 改进的 API 来控制和管理操作系统进程。引进 java.lang.ProcessHandle 及其嵌套接口 Info 来让开发者逃离时常因为要获取一个本地进程的 PID 而不得不使用本地代码的窘境。
  • 改进的 Stream API:改进的 Stream API 添加了一些便利的方法,使流处理更容易,并使用收集器编写复杂的查询。
  • 改进 try-with-resources:如果你已经有一个资源是 final 或等效于 final 变量,您可以在 try-with-resources 语句中使用该变量,而无需在 try-with-resources 语句中声明一个新变量。
  • 改进的弃用注解 @Deprecated:注解 @Deprecated 可以标记 Java API 状态,可以表示被标记的 API 将会被移除,或者已经破坏。
  • 改进钻石操作符(Diamond Operator) :匿名类可以使用钻石操作符(Diamond Operator)。
  • 改进 Optional 类:java.util.Optional 添加了很多新的有用方法,Optional 可以直接转为 stream。
  • 多分辨率图像 API:定义多分辨率图像API,开发者可以很容易的操作和展示不同分辨率的图像了。
  • 改进的 CompletableFuture API : CompletableFuture 类的异步机制可以在 ProcessHandle.onExit 方法退出时执行操作。
  • 轻量级的 JSON API:内置了一个轻量级的JSON API
  • 响应式流(Reactive Streams) API: Java 9中引入了新的响应式流 API 来支持 Java 9 中的响应式编程。

java10 新特性

  • 局部变量的类型推断 var关键字
  • GC改进和内存管理 并行全垃圾回收器 G1
  • 垃圾回收器接口
  • 线程-局部变量管控
  • 新增API:ByteArrayOutputStream
  • 新增API:List、Map、Set
  • 新增API:java.util.Properties
  • 新增API: Collectors收集器

java11 新特性

  • 181 嵌套类可见性控制
  • 309 动态文件常量
  • 315 改进 Aarch64 Intrinsics
  • 318 Epsilon–一个无操作的垃圾收集器
  • 320 删除 Java EE 和 CORBA 模块
  • 321 HttpClient
  • 323 用于 Lambda 参数的局部变量语法
  • 324 Curve25519 和 Curve448 算法的密钥协议
  • 327 Unicode 10
  • 328 Flight Recorder(飞行记录器)
  • 329 haCha20 和 Poly1305 加密算法支持
  • 330 Launch Single-File Source-Code Programs(启动单一文件的源代码程序)
  • 331 低开销的 Heap Profiling
  • 332 TLS 1.3支持
  • 333 ZGC: A Scalable Low-Latency Garbage Collector(可伸缩低延迟垃圾收集器)
  • 335 弃用 Nashorn JavaScript 引擎
  • 336 弃用 Pack200 工具和 API
    java 11 未深入研究,后续继续学习!

相关文章

  • java 各版本新特性介绍

    java8 新特性 Java8 主要包括的新特性有: 函数式接口如果一个接口只有一个抽象方法,那么该接口就成为一个...

  • 关于java8的学习(一)

    Java 8 新特性 官网java8介绍地址菜鸟教程关于java8的介绍 Java 8 里面加了很多的新特性,在这...

  • JDK14新特性介绍

    JDK14新特性介绍 描述 OpenJDK14是Java SE平台的版本14的开源参考实现,由Java社区流程中的...

  • 2017年,Java程序猿10本经典好书推荐

    1、Java 8实战 本书全面介绍了Java 8 这个里程碑版本的新特性,包括Lambdas、流和函数式编程。有了...

  • Java新特性快速笔记 - Java 10

    Java 10 是 Java 新的版本发布周期公布公布之后的第一个版本,相比于Java 9那么多新特性,这个版本就...

  • 各JDK版本的新特性

    JDK5的新特性: 自动拆装箱 Foreach 静态导入 可变参数 Var args 枚举 格式化输出 泛型 Pr...

  • Java11的新特性

    Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的...

  • Java15的新特性

    Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的...

  • Java12的新特性

    Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的...

  • JDK各个版本之间的内容变化

    Oracle 公布的未来 Java 版本发布和支持周期图 Java 11 新特性 Java 11 new feat...

网友评论

    本文标题:java 各版本新特性介绍

    本文链接:https://www.haomeiwen.com/subject/fwyhkhtx.html