摘自:
java新特性 @1.8
1、java8语言新特性
- 接口默认方法
- 重复注解
- lambda表达式
- 方法引用
- 函数式接口
2、java8类库新特性
- Stream
- Date/time API
- 并发包
3、java8虚拟机新特性
- PermGen空间被移除了,取而代之的是Metaspace(元空间)
一、java8语言新特性
1、接口的默认方法
代码如下:
interface Formula {
double calculate(int a);
default double sqrt(int a) {
return Math.sqrt(a);
}
}Formula接口在拥有calculate方法之外同时还定义了sqrt方法,实现了Formula接口的子类只需要实现一个calculate方法,默认方法sqrt将在子类上可以直接使用。
2、方法与构造函数引用
Java 8 允许你使用 :: 关键字来传递方法或者构造函数引用
目的:服务于Lambda,方法引用可以使语言的构造更紧凑简洁,重复利用已有的方法,减少冗余代码
//例子: String::valueOf,对应的Lambda:(s) -> String.valueOf(s)//例子: x::toString,对应的Lambda:() -> this.toString()//例子: String::toString,对应的Lambda:(s) -> s.toString()//例子: String::new,对应的Lambda:() -> new String()
3、函数式接口
Lambda 表达式是如何在java的类型系统中表示的呢?每一个lambda表达式都对应一个类型,通常是接口类型。
而“函数式接口”是指仅仅只包含一个抽象方法的 接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法。因为 默认方法 不算抽象方法,所以你也可以给你的函数式接口添加默认方法。
示例如下:
@FunctionalInterface
interface Converter<F, T> {
T convert(F from);
}
Converter<String, Integer> converter = (from) -> Integer.valueOf(from);
Integer converted = converter.convert("123");
System.out.println(converted); // 123需要注意如果@FunctionalInterface如果没有指定,上面的代码也是对的。
4、 重复注解
重复注解的定义允许在同一申明类型(类,属性,或方法)的多次使用同一个注解
可以直接使用多个重复注解Privilege,主要作用是提高代码的可读性@Privilege(functionCode="Add")@Privilege(functionCode="Delete")public void doSomeTing(){}
5、Lambda
Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。
二、java8类库新特性
1、Stream
Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。Stream API将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。
2、LocalDateTime
JDK1.8之前,Java处理日期、日历和时间的方式一直为社区所诟病,将 java.util.Date设定为可变类型,以及SimpleDateFormat的非线程安全使其应用非常受限。因此推出了java.time包,该包下的所有类都是不可变类型而且线程安全。
3、并发
hashmap
链接:https://juejin.cn/post/6844903743532564488
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。