跳至主要內容
Java 杂

Consumer

Consumer是Java 8中的一个函数式接口,它位于java.util.function包中。

定义了一个名为accept的抽象方法,该方法接受一个参数并且不返回任何结果。

换句话说,Consumer接口表示一个消费者,它可以对给定的对象执行某些操作,但不产生任何结果

接口声明

public interface Consumer<T> {

    /**
     * Performs this operation on the given argument.
     *
     * @param t the input argument
     */
    void accept(T t);

    /**
     * Returns a composed {@code Consumer} that performs, in sequence, this
     * operation followed by the {@code after} operation. If performing either
     * operation throws an exception, it is relayed to the caller of the
     * composed operation.  If performing this operation throws an exception,
     * the {@code after} operation will not be performed.
     *
     * @param after the operation to perform after this operation
     * @return a composed {@code Consumer} that performs in sequence this
     * operation followed by the {@code after} operation
     * @throws NullPointerException if {@code after} is null
     */
    default Consumer<T> andThen(Consumer<? super T> after) {
        Objects.requireNonNull(after);
        return (T t) -> { accept(t); after.accept(t); };
    }
}

codejava新特性大约 10 分钟
Java 12-16 - 1

Java 12-16 新特性

由于Java版本的更新迭代速度自Java 9开始为半年更新一次

Java 8到Java 9隔了整整三年,所以各个版本之间的更新内容比较少了。

alt text

Java12-16这五个版本并非长期支持版本,所以很多特性都是一种处于实验性功能

12/13版本引入了一些实验性功能,并根据反馈进行调整,最后在后续版本中正式开放使用。

新的switch语法

在Java 12引入全新的switch语法,让我们使用switch语句更加的灵活


codejava新特性大约 10 分钟
Java8回顾

Java8

Lambda 表达式

匿名内部类

在Java 8之前,我们在某些情况下可能需要用到匿名内部类,比如:

public static void main(String[] args) {
    //现在我们想新建一个线程来搞事情
    Thread thread = new Thread(new Runnable() {   
        //创建一个实现Runnable的匿名内部类
        @Override
        public void run() {   //具体的实现逻辑
            System.out.println("Hello World!");
        }
    });
    thread.start();
}

codejava新特性大约 10 分钟
Java9 - 模块机制

Java9

Java 9的主要特性有,全新的模块机制、接口的private方法等。

模块机制

简介

当我们导入一个jar包作为依赖时(包括JDK官方库),实际上很多功能我们并不会用到,但是由于它们是属于同一个依赖捆绑在一起,这样就会导致我们可能只用到一部分内容,但是需要引用一个完整的类库

实际上我们可以把用不到的类库排除掉,大大降低依赖库的规模。

于是,Java 9引入了模块机制来对这种情况进行优化,在之前的我们的项目是这样的:


codejava新特性大约 8 分钟
Java9 - 2

Java9

JShell交互式编程

Java 9为我们通过了一种交互式编程工具JShell

alt text

环境配置完成后,我们只需要输入jshell命令即可开启交互式编程了,它支持我们一条一条命令进行操作。

比如我们来做一个简单的计算:

alt text

我们一次输入一行(可以不加分号),先定义一个a=10和b=10,然后定义c并得到a+b的结果,可以看到还是非常方便的,但是注意语法还是和Java是一样的。


codejava新特性大约 7 分钟
Java10-11 - 1

Java10

Java 10主要带来的是一些内部更新,相比Java 9带来的直观改变不是很多,其中比较突出的就是局部变量类型推断了

局部变量类型推断 var

在Java中,我们可以使用自动类型推断:

public static void main(String[] args) {
    // String a = "Hello World!";   之前我们定义变量必须指定类型
    var a = "Hello World!";   //现在我们使用var关键字来自动进行类型推断,因为完全可以从后面的值来判断是什么类型
}

codejava新特性大约 5 分钟