JUC博客中也有讲java8新特性:
JUC并发编程学习笔记(狂神)_逮虾户<的博客-CSDN博客
------------------------------------------------------------------------------------------------------
转载(重要):
Java8新特性1:接口支持默认方法/静态方法
接口的默认方法
/*
从java 8开始,接口里允许定义默认方法。
格式:
public default 返回值类型 方法名称(参数列表){
方法体
}
备注:接口当中的默认方法,可以解决接口升级的问题。
*/
public interface MyInterfaceDefault {
//抽象方法
public abstract void methodAbs();
//新添加了一个抽象方法
// public abstract void methodAbs2();
//新添加的方法,改成默认方法
public default void methodDefault(){//public可以省略
System.out.println("这是新添加的默认方法");
}
}
============================================
public class MyInterfaceDefaultA implements MyInterfaceDefault{
@Override
public void methodAbs() {
System.out.println("实现了抽象方法,AAA");
}
}
=========================================================
public class MyInterfaceDefaultB implements MyInterfaceDefault {
@Override
public void methodAbs() {
System.out.println("实现了抽象方法,BBB");
}
@Override
public void methodDefault() {
System.out.println("实现类B覆盖重写了接口的默认方法");
}
}
==================================================/*
1、接口的默认方法,可以通过接口实现类对象,直接调用。
2、接口的默认方法,也可以被接口实现类进行覆盖重写。
*/
public class Demo02Interface {
public static void main(String[] args) {
//创建了实现类对象
MyInterfaceDefaultA a=new MyInterfaceDefaultA();
a.methodAbs();//调用抽象方法,实际运行的是右侧实现类。
//调用默认方法,如果实现类当中没有,会向上找接口的。
a.methodDefault();
System.out.println("=====================");
MyInterfaceDefaultB b=new MyInterfaceDefaultB();
b.methodAbs();
b.methodDefault();
}
}
//运行结果:
//实现了抽象方法,AAA
//这是新添加的默认方法
//=====================
//实现了抽象方法,BBB
//实现类B覆盖重写了接口的默认方法
接口的静态方法
/*
从java 8开始,接口当中允许定义静态方法。
格式:
public static 返回值类型 方法名称(参数列表){
方法体
}
提示:就是将abstract或者default换成static即可,带上方法体。
*/
public interface MyInterfaceStatic {
public static void methodStatic(){//public可以省略
System.out.println("这是接口的静态方法!");
}
}
==========================================
public class MyInterfaceStaticImpl implements MyInterfaceStatic {
}
=========================================
/*
注意事项:不能通过接口实现类的对象来调用接口当中的静态方法。
正确用法:通过接口名称,直接调用其中的静态方法。
格式:
接口名称.静态方法名(参数);
*/
public class Demo03Interface {
public static void main(String[] args) {
//创建了实现类对象
MyInterfaceStaticImpl impl=new MyInterfaceStaticImpl();
//错误写法!!!
// impl.methodStatic();
//直接通过接口名称调用静态方法
MyInterfaceStatic.methodStatic();//这是接口的静态方法!
}
}
Java8新特性1:lamda表达式
Java8新特性一:Lambda Expressions(Lambda 表达式)_Angus博客-CSDN博客
Java8新特性2:函数式接口可以使用lamda表达式,函数式接口在Java中是指:有且仅有一个抽象方法的接口。而Java中的函数式编程体现就是Lambda
Java8新特性二:Functional Interfaces(函数式接口,函数式编程)_Angus博客-CSDN博客
Java8新特性3:常用的函数式接口(Supplier,Consumer,Predicate,Function),jdk中有很多函数式接口的使用,我们可以使用它们的基于函数式接口的方法,简化编程。例如list.foreach
Java8新特性三:常用的函数式接口(Supplier,Consumer,Predicate,Function)_Angus博客-CSDN博客_java.util.function.supplier
Java8新特性4:stream流的编程:首先获取stream流,然后调用方法,简化编程
常用方法:
逐一处理:forEach
组合:concat
过滤:filter
映射:map
统计个数:count
取用前几个:limit
跳过前几个:skip
组合:concat
分组:collect
讲透JAVA Stream的collect用法与原理,远比你想象的更强大_架构悟道的博客-CSDN博客
lamda表达式对List进行分组,List按条件过滤_spring to do的博客-CSDN博客_lambda过滤list
Java8新特性四:Stream流_Angus博客-CSDN博客
(stream流)List转Map_stream list转map_yzmy的博客-CSDN博客
Java8新特性5:
双冒号:: 为引用运算符,而它所在的表达式被称为方法引用。如果Lambda要表达的函数方案已经存在于某个方法的实现中,那么则可以通过双冒号来引用该方法作为Lambda的替代者。