- Oracle公司于2014年3月发布了java8到现在已经过去了很久了,相信很大部分java开发者在使用java8开发的过程中都基本没使用过一些java8的新特性。在度娘上一搜java8新特性也是各类千奇百怪的文字,我这篇文章主要是整理了部分java8的新特性,并能在实际开发过程中遇到的内容。
- Lambda表达式
Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
使用 Lambda 表达式可以使代码变的更加简洁紧凑。
语法:
(parameters) -> expression
或
(parameters) ->{ statements; }
重要特征:
可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。
简单demo
/**
* 无参测试(旧)
* @param:
* @return:
* @author: wyc
* @date: 2020-02-26
**/
public static void runableTest1(){
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("测试线程1启动了");
}
};
runnable.run();
}
/**
* 有参测试(新)
* @param:
* @return:
* @author: wyc
* @date: 2020-02-26
**/
public static void runableTest2(){
Runnable runnable = ()->System.out.println("测试线程2启动了");
runnable.run();
}
/**
* 内部类
* @param:
* @return:
* @author: wyc
* @date: 2020-02-26
**/
interface MathOperation{
/**
* 方法
* @param a 参数1
* @param b 参数2
* @return: 返回
* @Author: wyc
* @Date: 2020-02-26
**/
int operation(int a,int b);
}
public static void main(String[] args){
MathOperation s = (a,b)-> a - b;
System.out.println(s.operation(5,3));
List<Integer> testList = new ArrayList<>();
testList.add(1);
testList.add(2);
testList.add(3);
testList.forEach((a)->System.out.println(a));
testList.forEach(System.out::println);
runableTest1();
runableTest2();
}
- 方法引用
方法引用通过方法的名字来指向一个方法。
方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
方法引用使用一对冒号 :: 。
最简单的方法引用demo,直接调用System.out.println():
List names = new ArrayList();
names.add("Google");
names.add("Runoob");
names.add("Taobao");
names.add("Baidu");
names.add("Sina");
names.forEach(System.out::println);
- Stream API(后面整理mysql连接时配合数据查询一同整理)
- Date Time API
Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理。
新的java.time包涵盖了所有处理日期,时间,日期/时间,时区,时刻(instants),过程(during)与时钟(clock)的操作。
// 获取当前的日期时间
LocalDateTime currentTime = LocalDateTime.now();
System.out.println("当前时间: " + currentTime);
LocalDate date1 = currentTime.toLocalDate();
System.out.println("date1: " + date1);
Month month = currentTime.getMonth();
int day = currentTime.getDayOfMonth();
int seconds = currentTime.getSecond();
System.out.println("月: " + month +", 日: " + day +", 秒: " + seconds);
LocalDateTime date2 = currentTime.withDayOfMonth(10).withYear(2012);
System.out.println("date2: " + date2);
// 12 december 2014
LocalDate date3 = LocalDate.of(2014, Month.DECEMBER, 12);
System.out.println("date3: " + date3);
// 22 小时 15 分钟
LocalTime date4 = LocalTime.of(22, 15);
System.out.println("date4: " + date4);
// 解析字符串
LocalTime date5 = LocalTime.parse("20:15:30");
System.out.println("date5: " + date5);
}```