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 个步骤: ...
随机推荐
- C语言-字符串函数的实现(五)之strstr
C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...
- JAVAEE_Servlet_21_Cookie
Cookie * Cookie 是什么? - Cookie翻译过来是曲奇饼干的意思 - Cookie可以保存回话状态,但是这个会话状态是保存在客户端上的,只要清除Cookie,或者 Cookie失效, ...
- Day07_35_Colection下的方法
Collection 下的方法 * **Collection 集合的方法应用** ``` package com.shige.Collection; import java.util.ArrayLis ...
- 小程序picker地区级联选择的问题及解决方案
各种系统中行政区域选择的场景不少,我们也有不少这样的场景.本想使用第三方的组件,但是大多有些小问题,不能满足需要.后面使用picker的mulitSelector模式写了一个,发现这种列模式的体验并好 ...
- hdu 3062 基础的2sat
题意: Party Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- POJ2239简单二分匹配
题意: 一周有7天,每天可以上12节课,现在给你每科课的上课时间,问你一周最多可以上几科课,一科课只要上一节就行了. 思路: 简单题目,直接二分就行了,好久没写二分匹配了,练习 ...
- CTFHub-技能树-信息泄露
CTFHub-技能树-信息泄露 1.目录遍历 文件夹不多,直接手翻就行 2.PHPinfo 直接搜索ctfhub{就能找到 3.备份文件下载 3-1 网站源码 打开之后: 因为这里组合比较少可以手动测 ...
- Andrew Ng机器学习算法入门(三):线性回归算法
线性回归 线性回归,就是能够用一个直线较为精确地描述数据之间的关系.这样当出现新的数据的时候,就能够预测出一个简单的值. 线性回归中最常见的就是房价的问题.一直存在很多房屋面积和房价的数据,如下图所示 ...
- ERROR: Pool overlaps with other one on this address space
出现问题 配置了两个不同的docker-compose.yml,使用了相同的网段,导致了在运行第二个yml文件时命令行报错目标网段已存在,报错如下: Creating network "v2 ...
- 线程安全(ThreadSafety)
这节讲一下线程安全的例子,以及如何解决线程安全问题. 上节提到了线程安全的问题,说了一个例子,1000个人抢100张票,这节就从此案例着手,下面先看一下代码实现: private static int ...