今天来介绍java 各版本的新特性,一篇文章让你了…
2020-06-10 16:01:29来源:博客园 阅读 ()
今天来介绍java 各版本的新特性,一篇文章让你了解
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 新特性
-
模块系统:模块是一个包的容器,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 未深入研究,后续继续学习!
总结
原文链接:https://www.cnblogs.com/coderjava/p/13085857.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash