面试题【jdk8新特性】

Lambda表达式

jdk8之前,启动一个线程代码

new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("123");
    }
}).start();

jdk8后

new Thread(()-> System.out.println("123")).start();

Lambda表达式也可称为闭包。本质上是一个匿名方法,允许把函数作为一个方法的参数,或者把代码看成数据。使用Lambda表达式可以使代码变的更加的简洁紧凑。

怎么使现有的函数支持Lambda?

增加函数式接口(就是接口里面必须有且只有一个抽象方法的普通接口,这样的接口可以 被隐式转换为Lambda表达式称为函数式接口)

@FunctionalInterface
public interface Runnable {
    // 抽象方法的普通接口
    public abstract void run();
}

@FunctionalInterface标明是函数式接口

接口的默认方法和静态方法

默认方法

默认方法与抽象方法不同之处在于:抽象方法必须要求实现,默认方法没有此要求(接口可以实现此方法,而且不需要实现类去实现)。

加上default关键字即可实现默认接口

public default void show1(){
    System.out.println("show1");   
}

好处:当需要修改接口的时候,需要修改全部的接口实现类。引入默认方法,就是为了解决接口的修改与现有的实现不兼容的问题。

静态方法

使用static关键字进行修饰,只能通过接口名进行调用

public static void show2() {
    System.out.println("show2");
}

新的日期API

旧的日期API Date是非线程安全的,并不支持国际化

LocalDate(无时区)和ZonedDate(有时区)

Base64

内置了Base64的编码和解码功能

Optional

Optional类实际上是一个存放对象的容器,很好的解决了空指针异常,这样我们就不用显示进行空值检测。

提供了创建对象的方法,ofNullable(),接受一个可以为null的对象。如果为null,创建空实例;否则,创建实例。

Optional<String> nullableOpt = Optional.ofNullable(str);

方法引用

可以直接引用已有java类或对象的方法或构造器

  • 构造器方法引用(格式:Class::new,调用默认构造器)
  • 类静态方法引用(格式:Class::static_method)
  • 类普通方法引用(格式:Class::method,方法不能带参数)
  • 实例方法引用(格式:instance::method)

https://blog.csdn.net/youanyyou/article/details/78993015

注解特性

重复注解

可以使用同一个注解去多次注解。

jdk8以前是通过注解容器去实现

public @interface Authority {
     String role();
}

public @interface Authorities {   //@Authorities注解作为可以存储多个@Authority注解的容器
    Authority[] value();
}

public class RepeatAnnotationUseOldVersion {
    @Authorities({@Authority(role="Admin"), @Authority(role="Manager")})
    public void doSomeThing(){
    }
}

jdk8后新增了重复注解

@Repeatable(Authorities.class)
public @interface Authority {
     String role();
}

public @interface Authorities {
    Authority[] value();
}

public class RepeatAnnotationUseNewVersion {
    @Authority(role="Admin")
    @Authority(role="Manager")
    public void doSomeThing(){ }
}
创建重复注解Authority时,加上@Repeatable,指向存储注解容器Authorities(仍然需要定义注解容器,只是一种使用简化)

类型注解

jdk8以前,注解只能用于程序元素(类、接口、方法、成员变量)

jdk8后,注解可以用在任何使用到类型的地方

TYPE_PARAMETER:表示该注解能写在类型参数的声明语句中。 类型参数声明如: <T>、<T extends Person>

TYPE_USE:表示注解可以再任何用到类型的地方使用,比如允许在如下位置使用:

  • 创建对象(用 new 关键字创建)
  • 类型转换
  • 使用 implements 实现接口
  • 使用 throws 声明抛出异常
     

String str = (@NotNull String) obj;

无处不在的注解,可以让编译器执行更严格的代码检查,从而提高程序的健壮性。

https://blog.csdn.net/liupeifeng3514/article/details/80722003

并行数组

数组排序,jdk8以前,Arrays.sort();   jdk8以后,Arrays.parallelSort();并行排序

增加了很多方法支持并行的数组处理

并发

增加了一些并发的类

Stream

Stream API极大简化了集合框架的处理,将要处理的集合元素看做流,流在管道中运输,并且可以在管道的节点上进行处理,比如筛选、排序、聚合等

它不是一种数据结构,不保存数据,只是在原数据集上定义了一组操作,并且只有在访问到具体的元素,采用执行操作。

按操作过程分为:

中间操作:返回结构都是流

最终操作:返回需要的数据

原文

https://blog.csdn.net/ZytheMoon/article/details/89715618

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值