Java - Java 8 新特性
一、Java8新特性
- Java8概述:Java8,也就是jdk1.8版本,是意义深远的一个新版本。是Java5之后一个大的版本升级,让Java语言和库仿佛获得了新生。
二、Lambda表达式
- Lambda表达式:Lambda表达式,也可称为闭包。Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。直白说就是匿名内部类的一种精简写法,然后由JVM通过推导把简化的表达式还原。
- Lambda格式:(parameters参数) -> expression表达式或方法体
- Lambda规范:
- 使用Lambda前提是接口中只能有一个方法。
- 可以省略类型声明。
- 如果实现方法的表达式只有一行,可以省略大括号和return。
- 如果方法入参只有一个参数,则可以省略入参括号
- Lambda表达式只能引用标记了final的外层局部变量。
- Lambda举例:
// 普通接口
public interface MathOperation {
int operation(int a, int b);
}
// Lambda测试类
public static void main(String args[]) {
// 普通匿名内部类
StringOperation a = new StringOperation() {
@Override
public String operation(String msg) {
return msg + "Lambda";
}
};
// Lambda表达式完整版本
StringOperation b = (String msg) -> {
return msg + "Lambda";
};
// 省略类型声明:JVM会自动匹配
StringOperation c = (msg) -> {
return msg + "Lambda";
};
// 省略方法体:前提是方法实现只能有一行代码
StringOperation d = (msg) -> msg + "Lambda";
// 省略入参括号:前提是方法只有一个入参
StringOperation e = msg -> msg + "Lambda";
}
五、默认方法
- 默认方法:Java8新增了接口的默认方法。简单说,默认方法就是接口可以有实现方法,而且不需要实现类去实现其方法。我们只需在方法名前面加个default关键字即可实现默认方法。
六、Optional类
- Optional类:Optional类是个容器,它可以保存类型T的值,或者仅仅保存NULL。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。Optional类的引入很好的解决空指针异常。
// Optional类测试代码
public static void main(String args[]) {
Integer value1 = null;
Integer value2 = new Integer(10);
// Optional.ofNullable() 允许传递为 null 参数
Optional<Integer> a = Optional.ofNullable(value1);
// Optional.of() 如果传递的参数是 null,抛出异常 NullPointerException
Optional<Integer> b = Optional.of(value2);
// Optional.isPresent() 判断是否为NULL,为NULL返回false
boolean aAresent = a.isPresent();
boolean bAresent = b.isPresent();
// Optional.orElse() 获取值,为NULL使用默认值(5)。
Integer aOrElse = a.orElse(new Integer(5));
// Optional.get() 获取值,为NULL抛异常。
Integer integer = a.get();
}
七、Nashorn JavaScript
- Nashorn JavaScript:从JDK1.8开始,Nashorn取代Rhino(JDK 1.6, JDK1.7)成为Java的嵌入式JavaScript引擎。Nashorn完全支持ECMAScript 5.1规范以及一些扩展。它使用基于JSR292的新语言特性,其中包含在JDK 7中引入的invokedynamic,将JavaScript编译成Java字节码。与先前的Rhino实现相比,这带来了2到10倍的性能提升。
- Nashorn JavaScript举例:
// Nashorn JavaScript测试方法
public static void main(String args[]) {
// 获取JavaScript执行器
ScriptEngine nashorn = new ScriptEngineManager().getEngineByName("nashorn");
try {
// 调用脚本
Object eval = nashorn.eval("print('test')");
// 调用脚本并获取返回值
Integer result = (Integer) nashorn.eval("10 + 2");
} catch (ScriptException e) {
e.printStackTrace();
}
}
八、日期时间 API
- 日期时间:Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理。在旧版的Java 中,日期时间API存在诸多问题(java.util.Date是非线程安全的,所有的日期类都是可变的、)
Java - Java 8 新特性的更多相关文章
- [转] Java 8的新特性
简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性.在本文中我们将学习这些新特性,并用实际的例子 ...
- Java 8的新特性—终极版
作者:杜琪[译] 原文链接:http://www.jianshu.com/p/5b800057f2d8 1. 简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本 ...
- Java 9和Java 10的新特性
http://www.infoq.com/cn/news/2014/09/java9 Java 9新特性汇总 继2014年3月份Java 8发布之后,Open JDK加快了开发速度, Java 9的发 ...
- Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结
Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结 1.1. Java的编年史2 ...
- JDK 15 JAVA 15的新特性展望
目录 JEP 371: Hidden Classes JEP 372: 删除 Nashorn JavaScript Engine JEP 377: 新的垃圾回收器ZGC正式上线了 JEP 378: T ...
- Java最近版本新特性使用介绍
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 在阅读<Thinking in Java>的过程中,并发这一章出现不少新特性,工作中也有 ...
- Java API —— JDK5新特性
JDK5新特性 自动拆装箱.泛型.增强for.静态导入.可变参数.枚举 1.增强for概述 1)简化数组和Collection集合的遍历 2)格式: ...
- Java SE 6 新特性: Java DB 和 JDBC 4.0
http://www.ibm.com/developerworks/cn/java/j-lo-jse65/index.html 长久以来,由于大量(甚至几乎所有)的 Java 应用都依赖于数据库,如何 ...
- Java SE 6 新特性: 对脚本语言的支持
2006 年底,Sun 公司发布了 Java Standard Edition 6(Java SE 6)的最终正式版,代号 Mustang(野马).跟 Tiger(Java SE 5)相比,Musta ...
- Java SE 6 新特性: 编译器 API
新 API 功能简介 JDK 6 提供了在运行时调用编译器的 API,后面我们将假设把此 API 应用在 JSP 技术中.在传统的 JSP 技术中,服务器处理 JSP 通常需要进行下面 6 个步骤: ...
随机推荐
- kali,创建/修改root密码,进入单元模式
第一次发博客,从入门开始,从爱好变为工作 本人学习渗透不到一个月,如果有大佬看到此文章请不要喷,毕竟萌新不懂事,哈哈~ kali是一种非常强大的渗透工具 先说一下kali中的三个符号把 ~ ...
- Axure常用操作备忘
目录 前言 技巧 边框重合 复制对象文本居中 复制粘贴样式 文本自适应 给图形添加连接点 导出图片无空白 前言 下面列出Axure画图过程中曾经遇到过的问题,备忘一下,避免别人也走弯路,法布施一下~ ...
- 16. Vue2.4+新增属性$attrs
vm.$attrs简介 首先我们来看下vue官方对vm.$attrs的介绍: 包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (class 和 style 除外).当一个组件没有声明 ...
- HUAWEI AppGallery Connect翻译服务升级,方便应用出海本地化
HUAWEI AppGallery Connect翻译服务全新升级,携手新宇智慧.语言桥等多家服务商为全球开发者提供优质的翻译服务,解决应用在全球分发时面临的多语言本地化问题,通过平台化与全环节的翻译 ...
- Molar mass UVA - 1586
An organic compound is any member of a large class of chemical compounds whose molecules contain c ...
- RandomForestClassifier参数
[RandomForestClassifier] 参数 n_estimators : 随机森林中树的个数,即学习器的个数. max_features : 划分叶子节点,选择的最大特征数目 n_feat ...
- 功能:SpringBoot日志配置详情
SpringBoot日志配置详情 一.介绍 在所有的项目中,日志是必不可少的,为了高效清晰的查找日志,可以配置日志输出的等级和格式. 在配置后,可以自定义输出日志到指定目录,可以按照天数来分割日志,可 ...
- Spring Boot集成sharding-jdbc实现分库分表
一.水平分割 1.水平分库 1).概念:以字段为依据,按照一定策略,将一个库中的数据拆分到多个库中.2).结果每个库的结构都一样:数据都不一样:所有库的并集是全量数据: 2.水平分表 1).概念以字段 ...
- 【Linux】 Linux网络编程
作者:李春港 出处:https://www.cnblogs.com/lcgbk/p/14779410.html 目录 前言 (一). 回顾系统编程进程的通信方式 (二). 网络编程大纲 (三). 网络 ...
- 使用Qt实现一个必应壁纸客户端
概要 必应的每日壁纸很好看,但是看不到一周以前的壁纸图片,日前使用python开发了必应壁纸收集站,可惜这样的收集站只能在线浏览,我在想要是有一款软件能够下载每日必应壁纸,并应用到windows的桌面 ...