Java9Java10Java11 新特性

mac2022-06-30  11

Java 9 新特性: 一.JDK 和 JRE 目录结构改变 java9 没有了 JRE 目录,分散了。 二.模块化系统:Jigsaw ——> Modularity 1.本质上讲,用模块来管理各个 package,通过声明某个 package 暴露,模块的概念,其实就是 package 外再裹一层,不声明默认就是隐藏。 因此,模块化使得代码组织上更安全,因为它可以指定哪些部分可以暴露,哪些部分隐藏。 2.实现目标 1.模块化的主要目的在于减少内存的开销 2.只须必要模块,而非全部 jdk 模块,可简化各种类库和大型应用的开发和维护 3.改进 Java SE 平台,使其可以适应不同大小的计算设备 4.改进其安全性,可维护性,提高性能 三.Java 的 REPL 工具:jshell 命令 四.接口的私有方法 Java8 中规定接口中的方法除了抽象方法之外,还可以定义静态方法和默认的方法。一定程度上,扩展了接口的功能,此时的接口更像是一个抽象类。 在 Java9 中,接口更加灵活和强大,连方法的访问权限修饰符都可以声明为 private 的了,此时方法将不会成为你对外暴露的 API 的一部分。 五.钻石操作符(<>)的语法升级 六.try 结构的语法升级 Java8 中,可以实现资源的自动关闭,但是要求执行后必须关闭的所有资源必须在 try 子句中初始化,否则编译不通过。 Java9 中,用资源语句编写 try 将更容易,我们可以在 try 自居中使用已经初始化过的资源,此时的资源是 final 的 InputStreamReader reader = new InputStreamReader(System.in); OutputStreamWriter writer = new OutputStreamWriter(System.out); try (reader;writer) { ... }catch(IOException e){ e.printStackTrace(); }.String 存储结构变更 String 再也不用 char[] 来存储了,改成了 byte[] 加上编码标记,节约了一些空间。 八.集合工厂方法:快速创建只读集合 九.InputStream 加强 InputStream 增加了一个非常有用的方法:transferTo,可以用来将数据直接传输到 OutputStream,这是在处理原始 数据流时非常常见的一种用法,如下实例: ClassLoader cl = this.getClass().getClassLoader(); try { InputStream is = cl.getResourceAsStream("hello.txt"); OutputStream os = new FileOutputStream("src\\hello1.txt")) { is.transferTo(os); //把输入流中的所有数据直接自动的复制到输出流中。 } catch(IOException e) { e.printStackTrace(); }.增强的 Stream API 1.Java 的 Stream API shi Java 标准库最好的改进之一,让开发者可以快速运算,从而能够有效的利用数据并行计算。 Java8 提供的 Stream 能够利用多核架构实现声明式的数据处理。 2.在 Java9 中,Stream API 变得更好,Stream 接口中添加了 4 个新的方法:takeWhile,dropWhile,ofNullable,, 还有个 iterator 方法的新重载方法,可以让你提供一个 Predicate(判断条件)来指定什么时候结束迭代。 3.除了对 Stream 本身的扩展,Optional 和 Stream 之间的结合也得到了改进。现在恶意通过 Optional 的新方法 stream() 将一个 Optional 对象转换为一个(可能是空的)Stream 对象。 十一.Javascript 引擎升级:Nashorn Java 10 新特性: 一.局部变量类型推断 好处:减少了啰嗦和形式的代码,避免了信息冗余,而且对齐了变量名,更容易阅读。 工作原理:: 在处理 var 时,编译期先是查看表达式右边部分,并根据右边变量值的类型进行推断,作为左边变量的类型,然后将该类型写入字节码中。 例: //1.声明变量时,根据所附的值,推断变量的类型 var num = 10; var list = new ArrayList<Integer>(); list.add(123); //2.遍历 for (var i : list) { .. } 不适合场景: 1.局部变量不赋值,就不能实现类型推断。 2.Lambda 表达式。 3.方法引用 4.为数组静态初始化 5.构造器的参数类型 6.属性 7.catch 块 二.集合新增创建不可变集合的方法 Java 11 新特性: 一.新增了一系列字符串处理方法 判断字符串是否为空白: "".isBlank(); 去除收尾空白: " Javastack ".strip(); //"Javastack" 去除尾部空格: " Javastack ".stripTrailing(); //" Javastack" 去除首部空格: " Javastack ".stripTrailing(); //"Javastack " 复制字符串: "Java".repeat(3); //"JavaJavaJava" 行数统计: "A\nB\n".lines().count(); //3.Optional 加强 三.局部变量类型推断升级 在 var 上添加注解的语法格式 四.全新的 HTTP 客户端 API : HttpClient(用来替换 HttpURLConnection) 1.HTTP/1.1 和 HTTP/1.2的主要区别是如何在客户端和服务器之间构建和传输数据。 HTTP/1.1.依赖于请求/响应周期。HTTP/2允许服务器"push"数据;它可以发送比客户端请求更多的数据。 这使得它可以优先处理并发送对于首先加载网页至关重要的数。 五.更简化的编译运行程序 java Xxx.java 六.其他新特性 废除 Nashorn 引擎 ZGC
最新回复(0)