Java 8 新特性 Ⅰ

编程入门 行业动态 更新时间:2024-10-18 18:20:13

Java 8 <a href=https://www.elefans.com/category/jswz/34/1767830.html style=新特性 Ⅰ"/>

Java 8 新特性 Ⅰ

## lambda 表达式

匿名函数, 可以理解为一段可以传递的代码

转换的规则: 删去能够确定(or可以通过推断得出)的东西(例: 只有一个函数, 那么不需要写函数名)

实质:

-   一方面, lambda 表达式作为接口的实现类的对象

-   一方面, lambda 表达式为匿名函数

    (万物皆对象)

```java
/**
 * lambda 表达式的使用
 * (x, x) -> xx
 * -> : lambda操作数 or 箭头操作符
 * ->的左边是lambda的形参列表, 对应要重写接口仲的抽象方法的形参列表
 * ->的右边是lambda体, 对应接口实现类要重写的方法的方法体 
 */
// 当只有一个方法时, 才不需要写方法名. 不然分不清使用哪一个方法
```

1.  无参, 无返回值

```java
@Test
public void test1(){
   Runnable r1  = new Runnable() {
       @Override
       public void run() {
           System.out.println("广州");
       }
   };
   r1.run(); // 调用线程

   System.out.println("============================");
   Runnable r2  = () -> System.out.println("广州"); // 去掉确定的信息
   r2.run(); // 调用线程
}
```

运行结果:

![1.运行结果](:0:0:0:0:q75.image#?w=372&h=115&s=4513&e=png&b=272935)

2.  1个形参, 没有返回值

```java
@Test
public void test2(){
   Comparator<Integer> com1 = new Comparator<Integer>() { // 匿名实现类
       @Override
       public int compare(Integer o1, Integer o2) {
           return Integerpare(o1, o2);
       }
   };
   int compare1 = com1pare(1,3); // 比较对象大小
   System.out.println(compare1); // 前一个数小 -> -1
   System.out.println("====================");
   // 只有一个方法 不需要写方法名(省略确定的东西, 如 Integer, @override ...)
   Comparator<Integer> com2 = (o1, o2) -> Integerpare(o1, o2); // lambda 表达式
   int compare2 = com2pare(5,3); // 比较对象大小
   System.out.println(compare2); // 后一个数小 -> 1
}
```

运行效果:

![2.运行结果](:0:0:0:0:q75.image#?w=306&h=98&s=4231&e=png&b=282a36)

3.  数据类型可以省略, 由编译器推断得出, 称为"类型判断"

```java
@Test
public void test03(){
    Consumer<String> con1 = new Consumer<String>() {
        @Override
        public void accept(String s) {
            System.out.println("hey man nice to meet you "+s);
        }
    };
    con1.accept("none"); // 调用方法
    Consumer<String> con2 = (String s) -> {
        System.out.println(s);
   };
   con2.accept("nice to meet you, bro");
   Consumer<String> con3 = (s) -> { // 类型可以被推断(泛型, 数组..) 所以可以不用写
       // 当然这里可以运用方法引用 System.out::println;
       System.out.println(s);
   };
   con3.accept("nice to meet you");
}
```

运行效果:

![3.运行效果](:0:0:0:0:q75.image#?w=354&h=106&s=7311&e=png&b=282a36)

4.  若函数需要一个参数时, 其小括号可以省略
5.  lambda需要≥2个参数, 执行多条语句, 并且可以有返回值

```java
@Test
public void test5(){
    Comparator<Integer> com1 = new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            System.out.println(o1);
            System.out.println(o2);
            return o1pareTo(o2);
        }
    };
    System.out.println(com1pare(12,22)); // 前面小 会输出 -1
    System.out.println("=========================");
    Comparator<Integer> com2 = (o1, o2)-> {         // {} 为lambda体
        System.out.println(o1);
        System.out.println(o2);
        return o1pareTo(o2);
    };
    System.out.println(com2pare(22,11)); // 方法调用, 后面小, 会输出 1
}
```

运行效果:

![5.输出结果](:0:0:0:0:q75.image#?w=365&h=211&s=5987&e=png&b=282a36)

6.  lambda体只有一条语句时, return 与 {} 若有, 可以省略

```java
@Test
public void test6(){
    Comparator<Integer> com1 = (o1, o2) ->{
        return o1pareTo(o2);
    };
    System.out.println(com1pare(12,4));
    System.out.println("=====================");
    Comparator<Integer> com2 = (o1, o2) -> o1pareTo(o2); // 可以使用方法引用 Integer :: compareTo
    System.out.println(com2pare(4,21));
}
```

运行效果:

![6.执行效果](:0:0:0:0:q75.image#?w=350&h=107&s=4594&e=png&b=272935)


## JUnit单元测试的使用

1.  需要导入的jar包 [下载地址]()

    ![导入jar包](:0:0:0:0:q75.image#?w=194&h=63&s=1950&e=png&b=ffffff)

2.  导入 (IDEA的话就通过 File -> Project Structure -> Libraries-> 按下`+` Java, 选择对应的文件夹, 需包含👆上面两个 jar 包) 然后·在Modules里对应的地方打勾即可

    ![导入步骤](:0:0:0:0:q75.image#?w=1063&h=192&s=15339&e=png&b=414450)

3.  创建单元测试类, 进行测试 (可以不使用main函数的情况下 测试某一部分代码的功能) 测试的注解一般是 @Test

    ![@Test](:0:0:0:0:q75.image#?w=218&h=89&s=4721&e=png&b=2e313e)

4.  编写单元测试方法

更多推荐

Java 8 新特性 Ⅰ

本文发布于:2023-12-05 21:23:44,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1665347.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:新特性   Java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!