(二十七)JDK1.8新特性

本文详细介绍了JDK1.8的一些主要新特性,包括Lambda表达式的使用,如简化线程和集合操作;默认方法的引入;Date API的更新,提供了新的时间日期处理类;以及流的概念,它允许声明性地处理数据集合。
摘要由CSDN通过智能技术生成

学习内容

  1. Lambda表达式
  2. 局部内部类中变量的修饰符
  3. 默认方法 static default
  4. Date API

Lambda表达式

简化书写
格式:(该方法的传参)->{该方法体具体执行内容}

  1. 案例:创建接口,定义求两个整数和方法,创建接口的子类对象,完成求10+20的和。
MathDemo md = new SonMath();
int sum = md.sum(10, 20);
System.out.println(sum);

MathDemo md = new MathDemo() {
	public int sum(int a, int b) {
		return a+b;
	}
};
int sum = md.sum(10, 20);
System.out.println(sum);

使用Lambda表达式书写,省去了接口的实现类,只有是函数式接口(只有一个抽象方法的接口),才能使用Lambda表达式替换。

MathDemo md2 = (int a, int b)->{return a+b;};
int sum2 = md2.sum(1,2);
System.out.peintln(sum2);
  1. 省略小括号
theString t = new Son();
t.peintString("sss");

当形参列表是一个的时候,可以省略小括号。

theString t = message -> System.out.println(message);
t.printString("ssss");

线程中的使用

简化线程的书写。

//基本版
Thread t = new Thread(new Runnable() {
	@override
	public void run() {
		for(int i = 0; i < 10; i++) {
			System.out.println(Thread.currentThread().getName()+"----"+i);
		}
	}
});
t.start();

//Lambda版本
Thread t2 = new Thread(() -> {
	for(int i = 0; i < 10; i++) {
		System.out.println(Thread.currentThread().getName()+"----"+i);
	}
});
t2.start();

forEach方法在集合中的使用

//使用forEach方法+Lambda表达式,完成对集合的遍历
list.forEach((s2)->System.out.println(s2));
System.out.printlb("========");

集合的排序

直接将compareTo简化为Lambda的形式比较两个参数。

//在jdk1.8之后,List集合出现了自己的排序方法default void sort(Comparator<? super E> c)
list.sort((o1,o2)->o1.compareTo(o2));
System.out.println(":::"+list);

局部内部类中的变量的修饰符

final修饰符可省略;
内部类在访问它所在的方法中的变量时,该变量必须是常量(被final修饰的);
jdk1.8之后,省略了final修饰符,但是本质上该变量还是final。

//局部内部类
class Outer {
	public void method() {
		final int num = 10;//局部变量 jdk1.8新特性 final可省略
		class Inner { //局部内部类
			public void print() {
				//num++; 是final修饰的常量
				System.out.println("sss" + num);
			}
		}
		//创建内部类对象,并调用print方法
		Inner i = new Inner();
		i.print();
	}
}

默认方法

接口中的方法,可以用abstract/default/static修饰,修饰符不能混合使用。

interface jdk_default {
	public abstract double sum(int a, int b);
	//静态方法 jdk1.8
	static void staticMethod() {
	System.out.println("接口中的静态方法");
	}
	//默认方法 jdk1.8 当接口中的方法被default修饰后,实现类重写该方法,要求权限修饰符只能是public
	default double sqrt(int a) {
		return Math.sqrt(a);
	}
}

Date API

jdk1.8新增了一些处理时间问题的专门类,在包java.time下包含了一组全新的时间日期API。
Time包下
LocalDate 代表的是 不带时间的日期 yyyyMMdd
LocalTime 代表的是 不带日期的时间 HH:mm:ss
LocalDateTime 包含了日期与时间 不过没有带时区
ZonedDateTime 包含了 日期与时间 带时区

定义:流是Java API的新成员,它允许我们以声明性方式处理数据集合。
Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的
Iterator。原始版本的 Iterator,用户只能显式地一个一个遍历元素并对其执行某些操作;高级版本的 Stream,用户
只要给出需要对其包含的元素执行什么操作,比如 “过滤掉长度大于 10 的字符串”、“获取每个字符串的首字母”等,
Stream 会隐式地在内部进行遍历,做出相应的数据转换。

总结

学习的jdk1.8新特性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值