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 个步骤: ...
随机推荐
- 0ctf_2017_babyheap
0ctf_2017_babyheap 首先检查一下保护 IDA 分析好的代码如下 首先申请了一块内存地址用来存放结构体数组,地址随机. 堆题常见的几个功能.我们来看看add 这里申请内存用的是call ...
- pycharm pymysql连接mysql 报错 pymysql.err.InterfaceError: (0, '')
pycharm pymysql连接mysql 执行MySQL操作遇到以下报错信息: conn.query(q) File "C:\Software\Python37\lib\site-p ...
- Kubernetes 降本增效标准指南 | 基于K8s 扩展机制构建云上成本控制系统
作者 王玉君,腾讯云后台高级开发工程师,负责腾讯云原生系统开发及建设. 晏子怡,腾讯云容器产品经理,在K8s弹性伸缩.资源管理领域有丰富的实战经验. 导语 Kubernetes 作为 IaaS 和 P ...
- vue 回顾
①.组件的注册 全局注册: // 注册 Vue.component('my-component', { template: '<div>A custom component!</di ...
- 【Navicat】获取表结构的DDL语句以及获取更新表字段的操作的DDL
1.获取表结构的DDL语句 2.获取修改表结构某一字段的DDL语句 设计表-修改表字段(记住不要保存)-SQL预览
- hdu2899 三分
题意: 给你个函数,F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x ,给你一个y,x的范围是0--100 问你最小的 F(x) 思路: 本人推数学公式啥 ...
- DVWA之Command Injection
Command Injection Command Injection,即命令注入,是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的.PHP命令注入攻击漏洞是PHP应用程序中常见 ...
- 【JavaScript】JS从入门到深入(复习查漏向
[JavaScript]JS从入门到深入(复习查漏向 pre 精细得学过一遍JS后才发现,原来之前CTF中有些nodejs的题目以及一些游戏题的payload就变得很好理解了. 基础知识 ECMASc ...
- 【python】Leetcode每日一题-丑数2
[python]Leetcode每日一题-丑数2 [题目描述] 给你一个整数 n ,请你找出并返回第 n 个 丑数 . 丑数 就是只包含质因数 2.3 和/或 5 的正整数. 示例1: 输入:n = ...
- Nginx解决跨域问题(CORS)
跨域 解决跨域问题一般有两种思路: CORS 在后端服务器设置 HTTP 响应头,把你需要运行访问的域名加入加入 Access-Control-Allow-Origin中. jsonp 把后端根据请求 ...