Z次元
文章 笔记 日志
专题
专栏分类 文章归档
友链
友情链接 朋友圈
留言
头像
系列文章
JDK新版特性(9-11)
系列文章
知识积累
最后更新:2025/2/15|创建时间:2025/1/30
文章摘要
文章主要介绍了JDK9-11新版本的主要特性

JDK9

接口私有方法

在jdk9中新增了接口私有方法,可以在接口中声明private修饰的方法。

public interface MyInterface {
    //定义私有方法
    private void a1() {
        System.out.println("ahzoo");
    }

    //default中调用
    default void z2() {
        z1();
    }
}

改进的try with resource

之前我们使用try with resource用来自动关闭资源文件,特别是在IO流部分使用的比较多。使用方式是将需要自动关闭的资源对象的创建放到try后面的小括号中,在jdk9中我们可以将这些资源对象的创建放到外面,然后将需要关闭的对象放到try后面的小括号中即可,示例:

/*
改进了try-with-resources语句,可以在try外进行初始化,在括号内引用,即可实现资源自动关闭
 */
public class TryWithResource {
    public static void main(String[] args) throws FileNotFoundException {
        //jdk8以前
        try (FileInputStream fileInputStream = new FileInputStream("");
             FileOutputStream fileOutputStream = new FileOutputStream("")) {

        } catch (IOException e) {
            e.printStackTrace();
        }

        //jdk9
        FileInputStream fis = new FileInputStream("abc.txt");
        FileOutputStream fos = new FileOutputStream("def.txt");
        //多资源用分号隔开
        try (fis; fos) {
                } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

String字符串的变化

因此在jdk9中将String内部的char数组改成了byte数组,这样就节省了一半的内存占用。

JDK10

局部变量类型推断

在jdk10以前声明变量的时候,我们会像下面这样:

String oldName = "ahzoo";
int oldAge = 18;
long oldMoney = 88888888L;
Object oldObj = new Object();

上面我们声明的时候使用了4种不同类型的变量,在jdk10中前面的类型都可以使用var来代替,JVM会自动推断该变量是什么类型:

var newName = "ahzoo";
var newAge = 18;
var newMoney = 88888888L;
var newObj = new Object();

注意:当然这个var的使用是有限制的,仅适用于局部变量,增强for循环的索引,以及普通for循环的本地变量;它不能使用于方法形参,构造方法形参,方法返回类型等。

JDK11

String新增方法

strip()方法,可以去除首尾空格,与之前的trim的区别是还可以去除unicode编码的空白字符,例如:

char c = '\u2000';//Unicdoe空白字符
String str = c + "ahzoo" + c;
System.out.println(str.strip());
System.out.println(str.trim());

System.out.println(str.stripLeading());//去除前面的空格
System.out.println(str.stripTrailing());//去除后面的空格

isBlank()方法,判断字符串长度是否为0,或者是否是空格,制表符等其他空白字符

String str = " ";
System.out.println(str.isBlank());

repeat()方法,字符串重复的次数

String str = "ahzoo";
System.out.println(str.repeat(7));

lambda表达式中的变量类型推断

jdk11中允许在lambda表达式的参数中使用var修饰

函数式接口:

    @FunctionalInterface
    public interface MyInterface {
        void m1(String a, int b);
    }

测试类:

   //支持lambda表达式参数中使用var
   MyInterface mi = (var a,var b)->{
       System.out.println(a);
       System.out.println(b);
   };

   mi.m1("ahzoo",999);

版权声明
本文依据 CC-BY-NC-SA 4.0 许可协议授权,请您在转载时注明文章来源为 Z次元 ,若本文涉及转载第三方内容,请您一同注明。
更多专栏文章推荐
知识积累
人非生而知之者,孰能无惑?惑而不从师,其为惑也,终不解矣。
将Maven项目组件上传到Maven中心仓(借助sonatype)
2024/6/8
String.valueOf()踩坑记录
2024/5/23
SpringBoot集成轻量级搜索引擎——Meilisearch
2025/8/7
JDK新版特性(18-21)
2025/2/7
评论区

删除确认

评论删除后无法恢复,请确认是否继续?
发表评论

这里还没有评论哦

快来发一条评论抢占前排吧

JDK9
接口私有方法
改进的try with resource
String字符串的变化
JDK10
局部变量类型推断
JDK11
String新增方法
lambda表达式中的变量类型推断
目录
JDK9
接口私有方法
改进的try with resource
String字符串的变化
JDK10
局部变量类型推断
JDK11
String新增方法
lambda表达式中的变量类型推断
博客
文章 笔记 日志
专题
专栏分类 文章归档
友链
友情链接 朋友圈
交流
留言 关于我
主页
菜单
置顶
主题
我的
十玖八柒
每天进步多一点
欢迎到访φ(゜▽゜*)♪
最新评论
个人占星:
DeepSeek没有想象中的好用
个人占星:
想给自己的网站弄个统计功能,但不会弄,头疼
永恒末匕:
好哇塞,这个厉害
十玖八柒:
测试图片发送
我的
关于我
个人主页
站点地图
RSS订阅
导航
十年之约
虫洞穿梭
开源博客
前端开源仓库
后端开源仓库
©2020 - 2025 By 十玖八柒 版权所有
豫ICP备20021466号