初探java8新特性

目录

Lambda表达式

方法引用

功能接口

默认方法

Java 8流

可选类

Nashorn JavaScript

新的日期_时间API

Base64


JAVA 8是JAVA编程语言开发的一个主要功能版本。它的最初版本于2014年3月18日发布。随着Java 8的发布,Java为函数式编程,新的JavaScript引擎,日期时间操纵的新API,新的流媒体API等提供了支持。
新功能
Lambda表达式 - 为Java增加了功能处理能力。

  • 方法引用 - 通过名称引用函数,而不是直接调用它们。 使用函数作为参数。
  • 默认方法 - 具有默认方法实现的接口。
  • 新工具 - 添加新的编译器工具和实用程序,如'jdeps'以找出依赖关系。
  • 流API - 新的流API以方便流水线处理。
  • 日期时间API - 改进的日期时间API。
  • 可选 - 强调最佳实践以正确处理空值。
  • Nashorn,JavaScript引擎 - 一种执行JavaScript代码的基于Java的引擎

Lambda表达式

Lambda表达式在Java 8中引入,并被吹捧为Java 8的最大特性.Lambda表达式有助于函数式编程,并简化了开发过程。
其实是参考的Kotlin还是python来着 思想就是 ()->
句法
lambda表达式的特征在于以下语法。

parameter -> expression body


以下是lambda表达式的重要特征。

  • Optional type declaration - 不需要声明参数的类型。 编译器可以从参数的值推断相同的值。
  • Optional parenthesis around parameter - 不需要在括号中声明单个参数。 对于多个参数,需要括号。
  • Optional curly braces - 如果身体含有单个陈述,则不需要在表情身体中使用花括号。
  • Optional return keyword - 如果主体具有单个表达式以返回值,则编译器会自动返回值。 需要大括号来指示表达式返回一个值。

一般是形式是  ()-> expression 括号里是入参 箭头后面是具体的操作和返回值
下面是一个简单的例子

 


package com.java.eight;
​
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
​
/**
 * @author tangwei
 * @date 2019/1/16 9:51
 */
public class Java8Tester {
​
    public static void main(String[] args) {
​
        List<String> names1 = new ArrayList<String>();
        names1.add("Mahesh ");
        names1.add("Suresh ");
        names1.add("Ramesh ");
        names1.add("Naresh ");
        names1.add("Kalpesh ");
​
        List<String> names2 = new ArrayList<String>();
        names2.add("Mahesh ");
        names2.add("Suresh ");
        names2.add("Ramesh ");
        names2.add("Naresh ");
        names2.add("Kalpesh ");
​
​
        Java8Tester tester = new Java8Tester();
        System.out.println("Sort using Java 7 syntax: ");
​
        tester.sortUsingJava7(names1);
        System.out.println(names1);
        System.out.println("Sort using Java 8 syntax: ");
​
        tester.sortUsingJava8(names2);
        System.out.println(names2);
    }
​
​
    public void sortUsingJava7(List<String> names) {
        Collections.sort(names, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return  o1.compareTo(o2);
            }
        });
    }
​
​
​
    private void sortUsingJava8(List<String> names) {
        names.sort(String::compareTo);
    }
}


达到的效果是一样的

方法引用

方法引用有助于通过名称指向方法。使用“::”符号描述方法引用。方法引用可以用来指出以下类型的方法 -
静态方法
实例方法
使用new运算符的构造函数(TreeSet :: new)
本人写过C++ 这其实的借鉴参考的C++


public class Java8Tester {
​
   public static void main(String args[]) {
      List names = new ArrayList();
​
      names.add("Mahesh");
      names.add("Suresh");
      names.add("Ramesh");
      names.add("Naresh");
      names.add("Kalpesh");
​
      names.forEach(System.out::println);
   }
}

names.forEach(System.out::println);
原先可能是

 

for (String name: names) {
    System.out.println(name);
}

这种形式 有什么具体的实际好处 目前博主还没感觉出来

功能接口

功能接口具有可展示的单一功能。例如,使用单个方法'compareTo'的Comparable接口用于比较目的。Java 8已经定义了很多功能接口,以便在lambda表达式中广泛使用。具体接口列表在java.util.Function包中。
个人的理解就是为了更好的使用Lambda表达式而编写的接口的,使用的时候看下文档吧
这里不细究

默认方法

Java 8在接口中引入了默认方法实现的新概念。为了向后兼容,添加了此功能,以便可以使用旧接口来利用Java 8的lambda表达式功能。
例如,'List'或'Collection'接口没有'forEach'方法声明。因此,添加这样的方法只会破坏集合框架的实现。Java 8引入了默认方法,以便List / Collection接口可以具有forEach方法的默认实现,并且实现这些接口的类不需要实现相同的方法。
同上

Java 8流

Stream是Java 8中引入的一个新的抽象层。使用流,您可以使用类似于SQL语句的声明方式处理数据。
流比较抽象 后面会详讲 这样初探先过了

可选类

可选是用于包含非空对象的容器对象。可选对象用于表示缺少值的空值。这个类有各种实用方法来帮助代码将值处理为'可用'或'不可用',而不是检查空值。它在Java 8中引入,类似于Guava中的Optional。

Nashorn JavaScript

在Java8中,Nashorn引入了一个大大改进的JavaScript引擎,用于替换现有的Rhino。Nashorn提供的性能提高2到10倍,因为它直接编译内存中的代码并将字节码传递给JVM。Nashorn使用Java 7中引入的invoke动态特性来提高性能。

新的日期_时间API

在Java 8中,引入了一个新的日期时间API来涵盖旧的日期时间API的以下缺点。

  • 不是线程安全的 - java.util.Date不是线程安全的,因此开发人员必须在使用日期时处理并发问题。 新的日期时间API是不可变的,并且没有setter方法。
  • 糟糕的设计 - 默认日期从1900开始,月份从1开始,而日从0开始,因此没有统一性。 旧的API对日期操作的直接方法较少。新的API为这些操作提供了许多实用方法。
  • 困难的时区处理 - 开发人员必须编写大量代码来处理时区问题。 新的API已经开发出来,保持了特定领域的设计。
    Java 8在java.time包下引入了一个新的日期时间API。以下是java.time包中引入的一些重要类。
  • 本地 - 简化的日期时间API,不需要处理时区复杂性。
  • 分区 - 专门的日期时间API来处理各种时区。

Base64

在Java 8中,Base64终于得到了应有的效果。Java 8现在具有用于Base64编码的内置编码器和解码器。在Java 8中,我们可以使用三种类型的Base64编码。

  • Simple - 输出映射到位于A-Za-z0-9 + /中的一组字符。 编码器不会在输出中添加换行符,并且解码器拒绝除A-Za-z0-9 + /以外的任何字符。
  • URL - 输出被映射到位于A-Za-z0-9 +_中的一组字符。 输出是URL和文件名安全。
  • MIME - 输出被映射为MIME友好格式。 输出以每行不超过76个字符的行表示,并使用回车'\ r'作为行分隔符,后接换行符'\ n'。编码输出的末尾不存在行分隔符。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值