玩转JDK8

1、关于JDK8之default关键字

     jdk1.8以前接⼝里面是只能有抽象方法,不能有任何方法的实现的;
     jdk1.8⾥面打破了了这个规定,引⼊了了新的关键字default,使⽤用default修饰⽅方法,可以在接口里面定义具体的⽅法实现;

2、新增base64加解密API

     Base64是网络上最常见的⽤用于传输8Bit字节码的编码⽅式之一,Base64就是
⼀种基于64个可打印字符来表示⼆进制数据的⽅法 基于64个字符A-Z,a-z,0-9,+,/的编码方式,是⼀种能将任意二进制数据用64种字元组合成字符串的⽅法,⽽而这个二进制数据和字符串串资料料之间是可以互相转换的,在实际应⽤用上,Base64除了了能将二进制数据可视化之外,也常⽤用来表示字串加密过后的内容 ;

     早期java要使⽤用Base64使⽤用JDK⾥里里sun.misc套件下的BASE64Encoder和BASE64Decoder这两个类;缺点:编码和解码的效率⽐比较差;

     jdk1.8之后java.util包中,新增了了Base64的类;好处:不⽤用引包,编解码销量量远⼤大于 sun.misc 和 Apache Commons Codec;

3、 Java新特性玩转JDK8之时间⽇日期处理理类

    JDK8以前时间处理时间试用,SimpleDateFormat,Calendar等类,确定缺点: java.util.Date 是非线程安全的 API设计⽐比较差,⽇期/时间对象比较,加减麻烦;

   JDK8以后:发布新的Date-Time API (JSR 310)来进⼀一步加强对⽇日期与时间的处理理

新增了了很多常见的api,如日期/时间的⽐比较,加减,格式化等
包所在位置 java.time
核⼼心类
LocalDate:不不包含具体时间的⽇日期。
LocalTime:不不含⽇日期的时间。
LocalDateTime:包含了了⽇日期及时间。

关于时间格式转换:

JDK8之前:SimpleDateFormat来进⾏行行格式化,但SimpleDateFormat并不是线程安全的JDK8之后:引⼊入线程安全的⽇日期与时间DateTimeFormatter;

4、JDK8 最重要的特性Lambda表达式

在JDK8之前,Java是不⽀持函数式编程的,所谓的函数编程,即可理理解是将⼀一个函数(也称为“⾏为”)作为⼀个参数进行传递, ⾯向对象编程是对数据的抽象(各种各的POJO类),⽽而函数式编程则是对行为的抽象(将行为作为⼀一个参数进⾏传递)

  举例:创建一个线程

 JDK8之前:

new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("线程1");
    }
});

jdk8之后Lambda表达式则只需要使⽤用⼀一句句话

new Thread(() -> System.out.println("线程1"));

lambda表达式 使⽤用场景(前提):⼀个接⼝中只包含⼀个⽅法,则可以使⽤用Lambda表达式,这样的接⼝称之为“函数接口” 语法: (params) -> expression

第⼀部分为括号内⽤用逗号分隔的形式参数,参数是函数式接口里⾯方法的参数;

第⼆二部分为⼀一个箭头符号:->;

第三部分为⽅方法体,可以是表达式和代码块
参数列列表 :
          括号中参数列列表的数据类型可以省略略不写
         括号中的参数只有⼀个,那么参数类型和()都可以省略不写
⽅方法体:
        如果{}中的代码只有⼀⾏,⽆论有返回值,可以省略略{},return,分号,要⼀一起省略,其他则需要加上;

好处: Lambda 表达式的实现⽅式在本质是以匿名内部类的⽅式进⾏行实现;

5、JDK8之函数式编程 Function

       Lambda表达式必须先定义接口,创建相关方法之后才可使用,这样做十分不便,其实java8已经内置了了许多接口, 例如下⾯面四个功能型接口,所以一般很少会由⽤户去定义新的函数式接口
      Java8的最⼤大特性就是函数式接⼝,所有标注了了@FunctionalInterface注解的接⼝口都是函数式接⼝;

Java8 内置的四⼤大核⼼心函数式接⼝口
Consumer<T> : 消费型接⼝口:有⼊入参,⽆无返回值
void accept(T t);
Supplier<T> : 供给型接⼝口:⽆无⼊入参,有返回值
T get();
Function<T, R> : 函数型接⼝口:有⼊入参,有返回值
R apply(T t);
Predicate<T> : 断⾔言型接⼝口:有⼊入参,有返回值,返回值类型确定是boolean
boolean test(T t);

Function
传⼊一个值经过函数的计算返回另⼀一个值
T:⼊入参类型,R:出参类型
      调⽤用⽅方法:R apply(T t)

5、JDK8之函数式编程 BiFunction

      BiFunction Function只能接收⼀个参数,如果要传递两个参数,则⽤用 BiFunction

@FunctionalInterface
public interface BiFunction<T, U, R> {
       R apply(T t, U u);
}

6、JDK8之函数式编程 Consumer

Consumer 消费型接口:有入参,⽆返回值
将 T 作为输入,不返回任何内容
调⽤用⽅方法:void accept(T t);

@FunctionalInterface
public interface Consumer<T> {
        void accept(T t);
}

⽤途: 因为没有出参,常⽤于打印、发送短信等消费动作

7、JDK8之函数式编程 Supplier

Supplier: 供给型接口:⽆⼊参,有返回值
T:出参类型;没有⼊参
调⽤用⽅方法:T get();

@FunctionalInterface
public interface Supplier<T> {
        T get();
}


用途: 泛型一定和⽅法的返回值类型是一种类型,如果需要获得一个数据,并且不需要传⼊参数,可
以使⽤用Supplier接口,例如 无参的⼯厂方法,即⼯厂设计模式创建对象,简单来说就是提供者

 

8、JDK8之函数式编程 Predicate

Predicate: 断言型接口:有⼊参,有返回值,返回值类型确定是boolean
T:⼊参类型;出参类型是Boolean
调⽤方法:boolean test(T t);

@FunctionalInterface
public interface Predicate<T> {
        boolean test(T t);
}
用途: 接收一个参数,⽤于判断是否满足一定的条件,过滤数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值