Java 8介绍
Java 8的主要新语法特性如下:
- Lambda表达式
Lambda表达式使Java程序员能够编写更加简洁、易读和易维护的代java基础部分8码。它是一种匿名函数,可以将其作为参数传递给其他方法或函数。 - 方法引用
方法引用是指通过名称来引用现有的方法,从而让代码变得更简洁、易读和易于维护。Java 8中提供了四种不同的方法引用方式:静态方法引用、实例方法引用、构造器引用和超类方法引用。 - 接口默认方法
Java 8允许在接口中定义具体实现的默认方法,这样实现类就可以继承该方法的实现,避免了因为新增方法而导致向所有实现类迁移代码的麻烦。 - 函数式接口
函数式接口仅包含一个抽象方法的接口,它是Java 8中Lambda表达式的基础。Java 8中提供了许多常用的函数式接口,例如:Predicate、Function、Consumer等。 - Stream API
Stream API是Java 8中一个强大的工具,它允许程序员轻松处理集合数据。使用流API可以实现筛选、排序、映射、归约等操作,让代码更加简洁、易读和易于维护。 - 时间API
Java 8中引入了新的时间API,它提供了一种更好的方式来处理日期和时间。这个API包含多个类,可以用来处理日历、时间、时区和持续时间等问题。 - Optional 类型
Optional类型是一个容器对象,可以包含null或非null值。它为程序员提供一种优雅的方式来处理null检查,从而避免NullPointerException异常。
这些新语法都带来了很大的变化,使得Java编程更加简洁、高效、可读性强和易于维护。
Lambda 表达式
Lambda是一个 匿名函数,我们可以把Lambda表达式理解为是 一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。
基础语法
Java8引入了一个新的操作符: ->,该操作符称为箭头操作符或Lambda操作符,箭头操作符将Lambda表达式拆分为2部分:
- 左侧:Lambda表达式的 参数列表
- 右侧:Lambda表达式中 所执行的功能,即Lambda体
语法格式1:无参数,无返回值:
语法格式2:有一个参数,并且无返回值,小括号可省略不写,:
语法格式3:有2个以上的参数,有返回值,并且Lambda体中有多条语句 ,有返回值
语法格式4:若Lambda体中只有一条语句,return和大括号都可省略不写
语法格式5:Lambda表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出数据类型,即“类型推断”
Lambda表达式需要 函数式接口 的支持!(函数式接口:接口中只有一个抽象方法的接口,称为函数式接口,可以使用 @FunctionalInterface 修饰。)
案例
函数式接口
内置的四大核心函数式接口
- Consumer:消费型接口 void accept(T t);
- Supplier:供给型接口 T get();
- Function(T,R):函数型接口 R apply(T t);
- Predicate:断言型接口 boolean test(T t);
案例
- Consumer:消费型接口
- Supplier:供给型接口
- Function(T,R):函数型接口
- Predicate:断言型接口
方法引用与构造器引用
方法引用
- 对象::实例方法名
- 类::静态方法名
- 类::实例方法名
注意:
- Lambda体中调用方法的参数列表与返回值类型,要与函数式接口中抽象方法的函数列表和返回值类型保持一致!
- 若Lambda参数列表中的第一参数是实例方法的调用者,第二个参数是实例方法的参数时,可以使用ClassName::method
构造器引用
注意:需要调用的构造器的参数列表要与函数式接口中抽象方法的参数列表保持一致!
并行流与串行流
- 并行流就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流。Java 8 中将并行进行了优化,我们可以很容易的对数据进行并行操作。Stream API可以声明性地通过parallel() 与sequential()在并行流与顺序流之间进行切换。
- fork/join框架:就是在必要的情况下,将一个大任务,进行拆分(fork)成若干个小任务(拆到不可再拆时),再将一个个的小任务运算的结果进行 join 汇总。
- Fork/Join框架与传统线程池的区别:采用工作窃取模式(work-stealing)
当执行新的任务时它可以将其拆分分成更小的任务执行,并将小任务加到线程队列中,然后再从一个随机线程的队列中偷一个并把它放在自己的队列中。
相对于一般的线程池实现, fork/join框架的优势体现仕对其中包含的任务的处理方式上。在一般的线程池中,如果一个线程正在执行的任务由于某些原因无法继续运行,那么该线程会处于等待状态.而在fork/join框架实现中,如果某个子问题由于等待另外一个子问题的完成而无法继续运行。那么处理该子问题的线程会主动寻找其他尚未运行的子问题来执行,这种方式减少了线程的等待时间,提高了性能。
Optional 容器
接口中的默认方法与静态方法
接口默认方法的”类优先”原则:
若一个接口中定义了一个默认方法,而另外一个父类或接口中又定义了一个同名的方法时选择父类中的方法。如果一个父类提供了具体的实现,那么接口中具有相同名称和参数的默认方法会被忽略。
接口冲突。
如果一个父接口提供一个默认方法,而另一个接口也提供了一个具有相同名称和参数列表的方法(不管方法是否是默认方法),那么必须覆盖该方法来解决冲突。
接口中的默认方法:
新时间日期 API
LocalDate、LocalTime、LocalDateTime
LocalDateTime
Instant:时间戳(以Unix元年:1970年1月1日 00:00:00 到某个时间之间的毫秒值)
计算时间间隔
- Duration:计算两个时间之间的间隔
- Period:计算两个日期之间的间隔
DateTimeFormatter:格式化时间/日期
时区的处理
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/19505.html