jdk8 新特性 (一) 接口中default与static关键字
JDK历史重大新特性
- jdk5重大的革命是推出:注解、泛型、for-eanch、并发包出现、枚举
- Jdk7重大的革命推出:switch中使用String
- Jdk8中自Java5(2004)来发生重大的革命,推出了Lambda、函数编程等。
Java8 新特性
1.Lambda 表达式 : Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
2.方法引用 :方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。 与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
3.默认方法: 默认方法就是一个在接口里面有了一个实现的方法。
4.新工具: 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。
5.tream API:新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。
6.Date Time API : 加强对日期与时间的处理。
7.Optional 类: Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常。
8.Nashorn, JavaScript 引擎 : Java 8提供了一个新的Nashorn javascript引擎,它允许我们在JVM上运行特定的javascript应用。
接口中 default 与 static 关键字
Jdk8TextService
public interface Jdk8TextService {
void addUser();
/**
* java1.8之前 接口中不能定义普通方法
* java1.8开始推出 default 在接口中的方法使用 default 关键字修饰的情况下,就可以写方法体
* 在接口中 使用default修饰的方法 实现类可以不用实现
*/
default String getDefault(){
return "java8新特性之 default 关键字";
}
/**
* java1.8开始推出 static 在接口中的方法使用 static 关键字修饰的情况下,就可以写方法体
* 在接口中 使用static修饰的方法 不能被子类继承 不能被实现
*/
static String getStatic(){
return "java8新特性之 static 关键字";
}
}
Jdk8TextServiceImpl
import com.jql.Jdk8.service.Jdk8TextService;
import org.springframework.stereotype.Service;
@Service
public class Jdk8TextServiceImpl implements Jdk8TextService {
@Override
public void addUser() {
}
}
Jdk8TextController
import com.jql.Jdk8.service.Jdk8TextService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class Jdk8TextController {
@Autowired
private Jdk8TextService jdk8TextService;
@GetMapping("/getDefault")
@ResponseBody
public String getDefault(){
return jdk8TextService.getDefault();
}
@GetMapping("/getStatic")
@ResponseBody
public String getStatic(){
return Jdk8TextService.getStatic();
}
}
运行效果
getDefault 方法中 如果实现类不想使用接口中的返回结果,可以实现该方法进行重写
@Service
public class Jdk8TextServiceImpl implements Jdk8TextService {
@Override
public void addUser() {
}
@Override
public String getDefault(){
return "java8新特性之 default 关键字 实现类重写方法!";
}
}
为什么jdk1.8开始推出 接口中 default ,static 关键字
为了 后续 的 面向函数编程
基本概念定义
1.什么是函数接口
如果我们在接口中只有一个唯一的抽象放法,该接口就可以默认的称作为函数接口
函数接口中支持 default ,static 关键字
@FunctionalInterface
public interface FunctionalUserInterface {
void addUser(String userName,String password);
default void defaultUser(){
System.out.println("default");
}
static void staticUser(){
System.out.println("static");
}
}
2. @FunctionalInterface作用
预定我们的接口中只能有一个唯一的抽象放法
1.两者实现起来并不冲突的,注解的作用主要的目的是为了强制约定一个接口只允许有一个抽象的方法
2.唯一一个抽象方法:可以存在static方法和default普通方法
3.特殊的方法
上面我们说,函数接口中只能存在一个且唯一的抽象放法,但有一个抽象放法除外,即Object类中的equals放法。
@FunctionalInterface
public interface FunctionalUserInterface {
void addUser(String userName,String password);
@Override
boolean equals(Object obj);
default void defaultUser(){
System.out.println("default");
}
static void staticUser(){
System.out.println("static");
}
}
4.java中 函数接口使用案例
1.Runnable接口
2.Comparable 接口 也是,这里就不截图了,又想去的朋友自己可以看一下
学习更多 http://www.mayikt.com/