1: jdk8中新增的方法
在jdk8中对接口进行了增强,在jdk8之前
interface 接口名{
静态常量:
抽象方法:
}
在jdk8之后
interface 接口名{
静态常量:
抽象方法:
默认方法:
静态方法:
}
2:默认方法
在jdk8以前只能有抽象方法和静态常量,会存在一下问题
如果有接口进行扩展,这个接口的对应的实现类都需要重写,不利于扩展
2.1:默认方法格式
interface 接口名:{
修饰符 default 返回值类型 方法名:{
方法体:
}
}
package com.example.java8.inter;
public class Demo1Interface {
public static void main(String[] args) {
A b = new B();
System.out.println(b.test3());
A c = new C();
System.out.println(c.test3());
}
}
interface A {
void test1();
// 新增一个方法,其他实现类都需要重写不利于扩展
void test2();
// 默认方法
default String test3() {
System.out.println("接口中默认方法");
return "你好";
}
}
class B implements A {
@Override
public void test1() {
}
@Override
public void test2() {
}
@Override
public String test3() {
return "接口B重写了方法";
}
}
class C implements A {
@Override
public void test1() {
}
@Override
public void test2() {
}
}
2.2:默认方法的使用
1:实现类调用接口的默认方法
2:实现类重写接口的默认方法
3:静态方法
3.1:静态方法格式:
interface 方法名:{
修饰符 static 返回值类型 方法名:{
方法体:
}
}
package com.example.java8.inter;
public class Demo1Interface {
public static void main(String[] args) {
A b = new B();
System.out.println(b.test3());
A c = new C();
System.out.println(c.test3());
System.out.println(A.test4());
}
}
interface A {
void test1();
// 新增一个方法,其他实现类都需要重写不利于扩展
void test2();
// 默认方法
default String test3() {
System.out.println("接口中默认方法");
return "你好";
}
/**
* 静态方法
* @return
*/
static String test4(){
return "静态方法";
}
}
class B implements A {
@Override
public void test1() {
}
@Override
public void test2() {
}
@Override
public String test3() {
return "接口B重写了方法";
}
}
class C implements A {
@Override
public void test1() {
}
@Override
public void test2() {
}
}
3.2 静态方法的使用:
静态方法不能被重写,只能通过接口类型调用:接口名.方法名
4 二者之间的区别:
1:默认方法只能通过实现了调用,静态方法只能通过接口名调用
2:默认方法可以被继承,实现类可以直接调用默认方法,也可以进行重写
3:静态方法不可以被继承,实现类不可以直接调用默认方法,不可以进行重写
2: Steam Api
2.1 集合处理数据的弊端:
当我们对集合进行操作时,除了最基本的新增,删除操作,最典型的就是遍历
package com.example.java8.stream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class SteamTest01 {
public static void main(String[] args) {
// 创建一个集合
List<String> list = new ArrayList<>();
list.add("张三丰");
list.add("张无");
list.add("杨幂");
list.add("你好");
System.out.println(list);
// 获取所有姓张的数据
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
String next = iterator.next();
if (!next.startsWith("张")){
iterator.remove();
}
}
System.out.println(list);
List<String> listSize = new ArrayList<>();
// 获取名字长度为3的数据
for (String item:list){
if (item.length()>=3){
listSize.add(item);
}
}
System.out.println(listSize);
}
}
针对上面不同的需求,需要对集合进行一遍遍的遍历,如果我们想进行更高效的遍历,需要jdk8中stream特性进行操作