java11新特性_Java11 发布前抓紧掌握这些新特性
快速回顾
1.Lambda表达式: (参数) -> {主体}
Lambda表达式打开了函数式编程爱好者继续使用Java的大门。Lambda表达式需要零个或多个参数,这些参数可以在表达式主体中访问,并随计算结果一起返回。
Comparator comparator = (a, b) -> a-b;
System.out.println(comparator.compare(3, 4)); // -1
2. 函数接口:只有一种方法的接口
lambda表达式本身被视为可以分配给函数接口的功能接口,如上所示。Java 8还提供了如下所示的新功能构造:
BiFunction comparator = (a, b) -> a-b;
System.out.println(comparator.apply(3, 4)); // -1
有关更多功能结构,请参阅java.util.function包,其拥有:Function,Supplier,Consumer,Predicate等。还可以使用下面注解来定义函数接口:
@FunctionalInterface
接口还可以具有方法的一个或多个默认实现,并且仍然可以保持为函数接口。它有助于避免不必要的抽象基类的默认实现。
可以使用::操作符访问静态和实例方法,并且可以使用 ::new访问构造函数,并且可以将它们作为函数参数传递,例如System.out::println.
3.流:不仅仅是迭代流是一系列对象和操作。 接口中添加了许多默认方法,以支持流的forEach, filter, map和reduce构造。提供集合的Java库现在支持流。 例如 BufferredReader.lines()。 所有集合都可以轻松转换为流。 还支持并行流操作,它在内部分配到多个CPU上的操作。
1)中间操作:懒惰性操作
对中间操作的懒惰执行时,在调用终止操作之前不会发生任何事情。
map(mapping):每个元素是一对一的,并转换为另一种形式。
filter(predicate):给定谓词为true的过滤元素。
peek(),limit()和sorted()是其他中间操作。
2)终止操作:结果化操作forEach(consumer):遍历每个元素并消费该元素
reduce(initialValue,accumulator):它以initialValue开头,并在每个元素上迭代,并以最终返回的值来保持值更新。
collect(collector):这是一个懒惰的评估结果,需要使用收集器收集,例如java.util.stream.Collectors,包括toList(),join(),summarizingX(),averagingX(),groupBy(), 和partitionBy()。
4. Optional:消除Null编程
基于Null的编程被认为是糟糕的,但几乎没有任何选择可以提前避免它。我们现在可以在Optional对象中测试isPresent(),而不是测试null。 读取它(流也有多个构造和操作)返回Optional对象。
5. JVM变化:PermGen已退役PermGen已被完全删除并被MetaSpace取代。 元空间(Metaspace)不再是堆内存的一部分,而是分配给进程的本机内存的一部分。 JVM调优现在需要不同的方面,因为监控是必需的,不仅对于堆,而且也包括对本机内存。
某些GC的组合已弃用。 GC根据环境配置自动分配。
还有其它的变化,包括NIO、DateTime、Security、简洁的JDK配置文件以及jDeps,jjs,JavaScript Engine工具等。
6.Java 9:延续上一版惯例
Java 9已经存在了一年多了,继续保持8的传统。 但它的关键特征模块系统仍然没有很好地被采用。 在我看来,在主流中真正采用这些功能还需要更多时间。 它以设计类的方式挑战开发人员。 他们现在需要在应用程序模块方面考虑更多,而不仅仅是一组类。 无论如何,这是传统开发人员通过基于微服务的开发所面临的类似挑战。 Java 9继续添加函数式编程功能,以保持Java的活力并改进JVM内部。
1)Java平台模块系统:小即是大
Java 9最着名的特性是Java平台模块系统(JPMS)。 这是迈向真正封装的重要一步。 把一个大模块打破为由密切相关的代码和数据组成的小而清晰的模块。 它类似于OSGi包,其中每个包定义它消耗的依赖关系并公开其他模块所依赖的东西。
它引入了编译和运行时之间的装配阶段,可以构建JDK和JRE的自定义运行时映像。 现在,JDK本身由模块组成。
~ java --list-modules
java.activation@9.0.2
java.base@9.0.2
java.compiler@9.0.2
java.corba@9.0.2
...
这些模块称为系统模块。 没有模块信息的jar被加载到未命名的模块中。 我们可以通过在文件module-info.java中提供以下信息来定义我们自己的应用程序模块:
requires—依赖于其他模块
exports—导出模块中包的公共API/接口
opens— 打开反射访问包
uses— 类似requires。
要了解更多信息,请参阅快速入门指南()。
2)创建模块示例以下是IntelliJ IDE中的快速步骤:
1. 在IntelliJ创建模块: 到File > New > Module - "first.module"
2. 在模块下的src中创建java类(/first.module/src)
3. 编写代码
package com.test.modules.print;
public class Printer {
public static void print(String input){
System.out.println(input);
}
}
4. 添加module-info.java : /first.module/src > New > package
module first.module {
exports com.test.modules.print; // 导出包的公共apis.
}
5. 与前面相似,创建模块 " main.module " 和 Main.java :
module main.module {
requires first.module;
}
Main文件代码:
package com.test.modules.main;
import com.test.modules.print.Printer;
public class Main {
public static void main(String[] args) {
Printer.print("Hello World");
}
}
6. IntelliJ自动编译它并记录依赖项和--module-source-path
7.要运行Main.java,它需要--module-path或-m
java -p /Workspaces/RnD/out/production/main.module:/Workspaces/RnD/out/production/first.module -m main.module/com.test.modules.main.Main
Hello World
Process finished with exit code 0
所以,通过这种方式,我们就可以定义模块了。
3)其它新特性Java 9附带了许多其他功能。 下面列出了一些重要的部分(也是为了追赶竞争对手):
响应式编程 - Java 9引入了响应流,它支持React,就像发布者和消费者之间的异步/等待通信一样。 它在Flow类中添加了标准接口。
JShell- Java Shell - 就像任何其他脚本语言一样,Java现在可以用作脚本语言。
流和集合增强:Java 9添加了一些与"有序"和"可选"流操作相关的API。 添加of()操作以简化创建集合,就像JavaScript一样。
JVM自我调优
G1是默认的GC,GC中的自我调优功能也有所改进。CMS已被弃用。
访问堆栈
StackWalker类被添加到对堆栈帧的延迟访问中,我们可以遍历并过滤到它。
多发行版JAR文件:MRJAR
一个Java程序可能包含与多个版本兼容的类。 说实话,我不确定这个功能有多么有用。
7.Java 10:更接近函数型语言
1)类型推断
Java 10带来了JavaScript的var。 您不仅可以自由声明变量的类型,还可以自由的构建集合类型。 以下内容在Java 10中有效:
var test = "9";
test = 1.0;
var set = Set.of(5, "X", 6.5, new Object());
代码变得越来越冗长,脚本语言的魔力越来越多地被添加到Java中。 它肯定会给Java带来这些功能的负面影响,但它给开发人员带来了很多动力。
2)更强大的JVM
在并行情况下,GC完全触发G1以提高整体性能。
堆分配可以在连接到系统的备用存储设备上分配。 它将有助于确定系统上Java进程的优先级。 与重要的优先级相比,低优先级的存储器可以使用慢速存储器。
java 10还改进了本地握手线程中的线程处理。 还增加了前期编译(实验性的)。 针对循环生成增强的字节码是Java 10的另一个有趣特性。
3)增强的语言级特性
在Java 10中,我们改进了Optional、不可修改的集合API。
结论我们已经看到了从Java 8到Java 10的历程以及Java受其他函数和脚本语言的影响。 Java是一种强大的面向对象编程语言,同时,它现在支持许多功能型结构。 Java不仅会带来其他语言的顶级功能,还会不断改进内部功能。 它正以极快的速度发展,保持跟进——在它逐步淘汰之前! 因为,Java 11、12已在路上!
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接
java11新特性_Java11 发布前抓紧掌握这些新特性相关推荐
- Redis 5.0 正式版发布了,19 个新特性
转载自 Redis 5.0 正式版发布了,19 个新特性 Redis 5.0 GA 正式版发布了! 下载地址: download.redis.io/releases/redis-5.0.0.tar. ...
- PyTorch 1.6、TensorFlow 2.3、Pandas 1.1 同日发布!都有哪些新特性?
作者 | 肖智清 出品 | AI科技大本营(ID:rgznai100) 7月29日,PyTorch 1.6.TenorFlow 2.3.Pandas 1.1恰巧同时发布.这三个库都是定期滚动更新,大约 ...
- 重新想象 Windows 8.1 Store Apps (91) - 后台任务的新特性: 下载和上传的新特性, 程序启动前预下载网络资源, 后台任务的其它新特性...
原文:重新想象 Windows 8.1 Store Apps (91) - 后台任务的新特性: 下载和上传的新特性, 程序启动前预下载网络资源, 后台任务的其它新特性 [源码下载] 重新想象 Wind ...
- 亿方云用户大会:六大产品新特性震撼发布 持续引领行业创新
亿方云用户大会暨产品发布会"Link Future 2017"于11月16日在杭州举办.本次大会围绕"安全赋能•效率未来"的主题展开,发布了行业首创的六大产品新 ...
- 香格里拉集团发布酒店品牌标识焕新计划;首旅如家发布全新中高端品牌万信至格酒店 | 美通企业日报...
今日看点:香格里拉集团发布酒店品牌标识焕新计划.首旅如家酒店集团发布中高端品牌万信至格酒店.安踏跑步发布全新氢跑鞋ZERO.麦当劳中国第700家绿色餐厅落户武汉.俄罗斯直接投资基金和Minapharm ...
- Q3财报发布前获海外资本接连加仓,百度打响价值重估战
北京时间11月17日,百度对外发布Q3季度财报.根据财报来看,百度在营收.利润指标均超华尔街市场预期.尽管今年发布的几个季度财报表现都还不错,但百度的市值要想实现突破似乎总差点"火候&quo ...
- 微软一站式示例代码库 8 月新代码示例发布
微软一站式示例代码库 8 月新代码示例发布. 下载地址: http://1code.codeplex.com/releases/view/71395 你也可以通过 示例代码浏览器 或 示例代码浏览器V ...
- ftt传感器_FTTTB温度传感器温度特性实验仪介绍及实验数据(新).doc
FTTTB温度传感器温度特性实验仪介绍及实验数据(新).doc FD-TTT-B温度传感器温度特性实验仪 "溫度"是一种重耍的热学物理量,它不仅和我们的生活环境密切相尖,在科研及生 ...
- 2021年专升本考试政策什么时候发布?发布前该准备什么?
开头先说重点: 考试政策是官方发布的唯一针对当年专升本考试的指导政策,是专升本考试的重要依据. 政策真的很重要!非常重要!十分重要! 今年由于疫情影响,一些省份的专升本政策出台略晚,给不少学生造成了相 ...
最新文章
- Hadoop详解(五):HDFS HA 和 Federation
- 一:Greenplum5.10.2 生产环境安装配置 (系统初始化、安装准备)
- es6 日期字符串转日期_【R语言新书】1.4 数据结构Ⅲ:字符串、日期时间
- java 的io流需要学吗_Java Io流怎么学习呢?
- mysql主库从库在同一台服务器_通过两种方式增加从库——不停止mysql服务
- 映射java是什么_java – 映射,绑定和解析有什么区别?
- ubuntu中的坑——Ubuntu中一些常用的软件和火狐浏览器插件的安装
- 统一建模语言——UML
- 手写bpnn算法实现iris多分类
- Mac OSX终极瘦身
- Unable to find a single main class from the following candidates
- 华为ME909之4G模块的开发
- webstorm绝对路径引入echarts_Webstorm+Webpack+echarts构建个性化定制的数据可视化图表两个echarts详细教程(柱状图,南丁格尔图)...
- python youtube api_使用youtube v3 API从youtube播放列表检索所有视频
- python后端工程师学什么_成为后端工程师需要学习什么
- 面试题汇总 (HTML与浏览器篇)
- mysql8.0 1064_MySQL 8.0.x 用户授权报错 1064 (42000)
- Flutter系列之在 macOS 上安装和配置 Flutter 开发环境
- tif文件在html打开,电脑里tif文件怎么打开?你学会了吗
- 基于人脸的常见表情识别 Task03笔记
热门文章
- 【Elasticsearch】Elasticsearch之别名
- Spark代码生成技术之现象CodeGenerator
- Spring Boot : Spring boot 的 AutoConfigurationImportSelector 自动配置原理
- 95-136-041-源码-Operator-OneInputStreamOperator
- 【Flink】Flink CEP 案例
- flink 1.9.0 编译:flink-fs-hadoop-shaded 找不到
- RabbitMQ系列笔记work模式
- for和foreach
- 安卓怎么调用系统的ui_安卓逆向 | 为了反射调用我们怎么能拿到被HOOK函数的实例...
- 面试官:Spring该选择哪个构造方法来进行实例化?画重点要考的