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"); } }
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"); } }
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); } }
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); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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