1.8jkd

202 阅读3分钟

摘自:

 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 允许你使用 :: 关键字来传递方法或者构造函数引用

作用:可以直接引用已有Java类或对象(实例)的方法或构造器,Java8中方法也是种对象
目的:服务于Lambda,方法引用可以使语言的构造更紧凑简洁,重复利用已有的方法,减少冗余代码
  1. //例子: String::valueOf,对应的Lambda:(s) -> String.valueOf(s)
  2. //例子: x::toString,对应的Lambda:() -> this.toString()
  3. //例子: String::toString,对应的Lambda:(s) -> s.toString() 
  4. //例子: 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、 重复注解

重复注解的定义

允许在同一申明类型(类,属性,或方法)的多次使用同一个注解

  1. 可以直接使用多个重复注解Privilege,主要作用是提高代码的可读性
  2. @Privilege(functionCode="Add")
  3. @Privilege(functionCode="Delete")
  4. 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
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。