JDK 9新特性

接口私有方法#

  • JDK 8新增了静态方法和默认方法,但是不支持私有方法
  • JDK 9新增了私有方法:private
复制代码
package com.ybchen.jdk9;

public interface Pay {
    void pay();

    default void defaultPay() {
        privateMethod();
    }

    private void privateMethod() {
        System.out.println("接口私有方法");
    }
}
class PayImpl implements Pay{
    public static void main(String[] args) {
        PayImpl pay=new PayImpl();
        pay.defaultPay();
        pay.pay();
    }

    @Override
    public void pay() {
        System.out.println("pay");
    }
}
复制代码

注意事项#

  • 接口中的静态方法不能被实现类继承子接口继承,但是接口中的非静态的默认方法可以被实现类继承
  • 例如:List.of()方法,ArrayList虽然继承了List,但是不能用ArrayList.of()方法
  • 类的静态方法可以被继承

try-with-resource#

  在try外进行初始化,在括号内引用,即可实现资源自动关闭,多个变量则用分号进行分割。不需要声明资源就可以使用它,并得到相同的结果。

复制代码
    public static void main(String[] args) throws FileNotFoundException {
        String path = "/Users/Desktop/t.txt";
        test(path);
    }
    private static void test(String filepath) throws FileNotFoundException {
        OutputStream out = new FileOutputStream(filepath);
        try (out) {
            out.write((filepath + "https://www.cnblogs.com/chenyanbin/").getBytes());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
复制代码

只读集合#

  集合中只能读取,不能添加或者删除里面的元素。

jdk9之前

复制代码
package com.ybchen.jdk9;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @Description:
 * @Author:chenyanbin
 * @Date:2020/12/24 8:28 下午
 * @Versiion:1.0
 */
public class ListDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("springboot");
        list.add("springmvc");
        list = Collections.unmodifiableList(list);
        System.out.println(list);
        list.add("vue");
    }
}
ListDemo
复制代码

jdk9之后

 

复制代码
package com.ybchen.jdk9;

import java.util.List;

/**
 * @Description:
 * @Author:chenyanbin
 * @Date:2020/12/24 8:28 下午
 * @Versiion:1.0
 */
public class ListDemo {
    public static void main(String[] args) {
        List<String> list = List.of("springboot", "springmvc");
        System.out.println(list);
        list.add("vue");
    }
}
ListDemo
复制代码

Stream API#

takeWhile#

  有序的集合,从Stream中获取一部分数据,返回从头开始的尽可能多的元素,直到遇到第一个false结果,如果第一个值不满足断言条件,将返回一个空的Stream

复制代码
package com.ybchen.jdk9;

import java.util.List;
import java.util.stream.Collectors;

/**
 * @Description:
 * @Author:chenyanbin
 * @Date:2020/12/24 8:28 下午
 * @Versiion:1.0
 */
public class ListDemo {
    public static void main(String[] args) {
        List<String> list = List.of("springboot", "springmvc","","vue")
                .stream()
                .takeWhile(obj->!obj.isEmpty())
                .collect(Collectors.toList());
        //只要有不满足的,直接返回结果集
        System.out.println(list);
    }
}
ListDemo
复制代码

dropWhile#

  与takeWhile相反,返回剩余的元素,和takeWhile方法形成互补

 

复制代码
package com.ybchen.jdk9;

import java.util.List;
import java.util.stream.Collectors;

/**
 * @Description:
 * @Author:chenyanbin
 * @Date:2020/12/24 8:28 下午
 * @Versiion:1.0
 */
public class ListDemo {
    public static void main(String[] args) {
        List<String> list = List.of("springboot", "springmvc","","vue")
                .stream()
                .dropWhile(obj->!obj.isEmpty())
                .collect(Collectors.toList());
        //遇到不满足的元素,返回剩余的元素
        System.out.println(list);
    }
}
ListDemo
复制代码

 

posted @   陈彦斌  阅读(100)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2019-12-23 Redis之Java客户端Jedis
点击右上角即可分享
微信分享提示
主题色彩