Lambda表达式

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

new Thread(new Runnable() {@Overridepublic 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

面试题【jdk8新特性】相关推荐

  1. 2022 最新 JDK8 新特性 面试题

    2022 最新 JDK8 新特性 面试题 1.阐述 Java 7 和 Java 8 的区别 2.Java SE 8中最流行和最著名的最新功能是什么? 3.是什么使Java SE 8优于其他? 4.在J ...

  2. 集合框架,JDK8新特性

    一.集合框架 1.为什么会有集合? 集合和数组都是java中提供的可以用来存储多个数据的一种容器.由于数组类型特点是存储同一类型的元素且长度固定,可以存储基本数据类型值.为了满足现实需求, Java中 ...

  3. JDK8新特性之函数式接口

    转载自 JDK8新特性之函数式接口 什么是函数式接口 先来看看传统的创建线程是怎么写的 Thread t1 = new Thread(new Runnable() {@Overridepublic v ...

  4. JDK8新特性之重复注解

    转载自 JDK8新特性之重复注解 什么是重复注解 下面是JDK8中的重复注解( java.lang.annotation.Repeatable)定义的源码. @Documented @Retentio ...

  5. JDK8新特性之Optional

    转载自 JDK8新特性之Optional Optional是什么 java.util.Optional Jdk8提供 Optional,一个可以包含null值的容器对象,可以用来代替xx != nul ...

  6. JDK8新特性之方法引用

    转载自 JDK8新特性之方法引用 什么是方法引用 方法引用是只需要使用方法的名字,而具体调用交给函数式接口,需要和Lambda表达式配合使用. 如: List<String> list = ...

  7. JDK8新特性之Lambda表达式

    转载自 JDK8新特性之Lambda表达式 什么是Lambda表达式 Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁.当开发者在编写Lambda表达式时,也会随之被编译成 ...

  8. Java番外篇2——jdk8新特性

    Java番外篇2--jdk8新特性 1.Lambda 1.1.无参无返回值 public class Test {interface Print{void print();}public static ...

  9. 接口与抽象类区别和接口jdk8新特性

    jdk8之前特点对比抽象类 1 接口用interface表示,和类是并列的,定义接口就是定义接口的成员 2 接口只能定义公共抽象方法(public abstract)和全局静态最终变量(public ...

  10. jdk8新特性之出现This inspection finds all usages of methods that have @since tag in their documentation.

    今天在做jdk8新特性测试的时候出现了如上图的bug,提供两种解决办法. 解决思路一:            检查自己项目的JDK是不是JDK8,若不是请选择JDK8. 解决思路二: 打开自己的IDE ...

最新文章

  1. python输出print(x+y)_Python语句序列“x='car';y=2; print(x+y)”的输出结果是_学小易找答案...
  2. 【书单】matlab 科学计算、数值分析以及数学物理问题
  3. 所有被td:last-child a影响到了的Spartacus表格
  4. linux数据泵导入command not found_MySQL:数据库结构优化、高可用架构设计、数据库索引优化...
  5. python的Dict和set类型
  6. spring 定时任务---task
  7. python pip 安装 win10 解决anacoda代理错误 ProxyError: Conda cannot proxy configuration
  8. 基于RV1126平台imx291分析 --- media部件注册 imx291
  9. linux 下配置jdk环境变量
  10. 运动控制卡应用开发教程之Python
  11. 进程间通信之CreatePipe
  12. python源码中的pass
  13. 软考知识点笔记之----项目范围说明书
  14. python 卡方分布函数_推断统计分析(二):python验证三大抽样分布
  15. c++高级编程学习笔记7
  16. Perl-LWP文档
  17. Linux终端Terminal常用快捷键
  18. 最好的android智能手表,安卓智能手表推荐?十款好用的安卓智能手表排行榜
  19. 订单系统设计 --- SaaS订单中心存储方案
  20. Avoid adding reactive properties to a Vue instance or its root $data at runtime - declar

热门文章

  1. 稳恒(有人透传云)NBIOT模块使用指南(2)
  2. ctf_BUUCTF_web(1)
  3. DL4J中文文档/开始/Eclipse DL4J示例之旅
  4. 基于51单片机的全自动洗衣机系统设计-protues原理图、程序(转发)
  5. Java 8 辣么大(lambda)表达式不慌之—–(三)Consumer
  6. 超前进位加法器实验报告_北科大第二次计组实验报告超前进位加法器.doc
  7. matlab实现振动弹簧的实时动画,CSS如何实现弹簧动画效果
  8. 星历表DE405/406 testeph.f汉化兼修改
  9. 脚本守护的方式实现了android应用程序的守护,仙境传说RO守护永恒的爱
  10. 计算机技术 食堂管理,食堂管理系统需求规格说明.doc