Java 8新特性

一、Lambda表达式

Lambda表达式是一个匿名函数(指的是没有函数名的函数),它基于数学中的λ演算得名,直接对应于其中的Lambda抽象。Lambda表达式可以表示闭包。

Lambda表达式允许把函数作为一个方法的参数。Lambda表达式的基本语法:

(parameters)-> expression
或者
(parameters)->{statements;}
Lambda表达式是通过函数式接口(只有一个方法的普通接口)来实现的。函数式接口可以被隐式地转换为Lambda表达式。

二、方法的默认实现和静态方法

使用关键字default可以给接口中的方法添加默认实现,此外,接口中还可以定义静态方法。接口也可以包含行为,而不仅仅包含方法的定义,但是不能在接口中定义私有方法。

三、方法引用

方法引用指的是可以直接引用Java类或对象的方法。它可以被看成是一种更加简洁易懂的Lambda表达式。

方法引用共有下面4种形式:

1)引用构造方法:ClassName::new

2)引用类静态方法:ClassName::methodName

3)引用特定类的任意对象方法:ClassName::methodName

4)引用某个对象的方法:instanceName::methodName

四、注解(Annotation)

  1. 引入了重复注解机制,相同的注解在同一个地方可以声明多次。

  2. 扩展了注解,注解被使用的范围更广。可用于类型,注解可以应用在任何地方:局部变量、泛型类、⽗类与接⼝的实现,就连⽅法的异常也能添加注解。

五、类型推测

编译器能根据显示声明的已知的信息 推断出你没有显示声明的类型。

Map<String, Object> map = new Map<String, Object>();

等价于

Map<String, Object> map = new Map<>();

六、参数名字

JDK1.8通过在编译的时候增加-parameters选项,以及增加反射API与Parameter.getName()方法实现了获取方法参数名的功能。

七、新增Optional类

引入Optional类来处理空指针的情况,从而增强了代码的可读性。

八、新增Stream类

引入函数式编程的风格,提供了parallel、map、reduce等方法,这些方法用于增加对原生类并发处理的能力。

九、日期新特性

1.8以前

1)Calendar:实现日期和时间字段之间转换,它的属性是可变的。因此,它不是线程安全的。

2)DateFormat:格式化和分析日期字符串。

3)Date:用来承载日期和时间信息,它的属性是可变的。因此,它不是线程安全的。

1.8

新的java.time主要包含了处理日期、时间、日期/时间、时区、时刻(instants)和时钟(clock)等操作。

// Clock类通过指定一个时区,可以获取到当前的时刻、日期与时间

Clock c = Clock.system(ZoneId.of(“Asia/Shanghai”); //上海时区

//Instant 使用

Instant ist = Instant.now();

ist.getEpochSecond(); //精确到秒

ist.toEpochMilli(); //精确到毫秒

十、调用JavaScript

增加API使得通过Java程序来调用JavaScript代码。

ScriptEngineManager manager = new ScriptEngineManager();
 
ScriptEngine engine = manager.getEngineByName("JavaScript");
 
engine.getClass().getName();

十一、Base64

把Base64编码添加到了标准类库中。

十二、并行数组

对数组并行处理的方法(parallelXxx)。

int arr[] = {1,5,8,18,3,14};
Arrays.parallelSort(arr);
Arrays.stream(arr).forEach(i->System.out.pront(i + " "));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值