面试题【jdk8新特性】
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新特性】相关推荐
- 2022 最新 JDK8 新特性 面试题
2022 最新 JDK8 新特性 面试题 1.阐述 Java 7 和 Java 8 的区别 2.Java SE 8中最流行和最著名的最新功能是什么? 3.是什么使Java SE 8优于其他? 4.在J ...
- 集合框架,JDK8新特性
一.集合框架 1.为什么会有集合? 集合和数组都是java中提供的可以用来存储多个数据的一种容器.由于数组类型特点是存储同一类型的元素且长度固定,可以存储基本数据类型值.为了满足现实需求, Java中 ...
- JDK8新特性之函数式接口
转载自 JDK8新特性之函数式接口 什么是函数式接口 先来看看传统的创建线程是怎么写的 Thread t1 = new Thread(new Runnable() {@Overridepublic v ...
- JDK8新特性之重复注解
转载自 JDK8新特性之重复注解 什么是重复注解 下面是JDK8中的重复注解( java.lang.annotation.Repeatable)定义的源码. @Documented @Retentio ...
- JDK8新特性之Optional
转载自 JDK8新特性之Optional Optional是什么 java.util.Optional Jdk8提供 Optional,一个可以包含null值的容器对象,可以用来代替xx != nul ...
- JDK8新特性之方法引用
转载自 JDK8新特性之方法引用 什么是方法引用 方法引用是只需要使用方法的名字,而具体调用交给函数式接口,需要和Lambda表达式配合使用. 如: List<String> list = ...
- JDK8新特性之Lambda表达式
转载自 JDK8新特性之Lambda表达式 什么是Lambda表达式 Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁.当开发者在编写Lambda表达式时,也会随之被编译成 ...
- Java番外篇2——jdk8新特性
Java番外篇2--jdk8新特性 1.Lambda 1.1.无参无返回值 public class Test {interface Print{void print();}public static ...
- 接口与抽象类区别和接口jdk8新特性
jdk8之前特点对比抽象类 1 接口用interface表示,和类是并列的,定义接口就是定义接口的成员 2 接口只能定义公共抽象方法(public abstract)和全局静态最终变量(public ...
- jdk8新特性之出现This inspection finds all usages of methods that have @since tag in their documentation.
今天在做jdk8新特性测试的时候出现了如上图的bug,提供两种解决办法. 解决思路一: 检查自己项目的JDK是不是JDK8,若不是请选择JDK8. 解决思路二: 打开自己的IDE ...
最新文章
- python输出print(x+y)_Python语句序列“x='car';y=2; print(x+y)”的输出结果是_学小易找答案...
- 【书单】matlab 科学计算、数值分析以及数学物理问题
- 所有被td:last-child a影响到了的Spartacus表格
- linux数据泵导入command not found_MySQL:数据库结构优化、高可用架构设计、数据库索引优化...
- python的Dict和set类型
- spring 定时任务---task
- python pip 安装 win10 解决anacoda代理错误 ProxyError: Conda cannot proxy configuration
- 基于RV1126平台imx291分析 --- media部件注册 imx291
- linux 下配置jdk环境变量
- 运动控制卡应用开发教程之Python
- 进程间通信之CreatePipe
- python源码中的pass
- 软考知识点笔记之----项目范围说明书
- python 卡方分布函数_推断统计分析(二):python验证三大抽样分布
- c++高级编程学习笔记7
- Perl-LWP文档
- Linux终端Terminal常用快捷键
- 最好的android智能手表,安卓智能手表推荐?十款好用的安卓智能手表排行榜
- 订单系统设计 --- SaaS订单中心存储方案
- Avoid adding reactive properties to a Vue instance or its root $data at runtime - declar
热门文章
- 稳恒(有人透传云)NBIOT模块使用指南(2)
- ctf_BUUCTF_web(1)
- DL4J中文文档/开始/Eclipse DL4J示例之旅
- 基于51单片机的全自动洗衣机系统设计-protues原理图、程序(转发)
- Java 8 辣么大(lambda)表达式不慌之—–(三)Consumer
- 超前进位加法器实验报告_北科大第二次计组实验报告超前进位加法器.doc
- matlab实现振动弹簧的实时动画,CSS如何实现弹簧动画效果
- 星历表DE405/406 testeph.f汉化兼修改
- 脚本守护的方式实现了android应用程序的守护,仙境传说RO守护永恒的爱
- 计算机技术 食堂管理,食堂管理系统需求规格说明.doc