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
JDK新版特性(18-21)
2025/2/7
JDK新版特性(11-17)
2025/1/30
评论区
发表评论

这里还没有评论哦

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

JDK9
接口私有方法
改进的try with resource
String字符串的变化
JDK10
局部变量类型推断
JDK11
String新增方法
lambda表达式中的变量类型推断
目录
JDK9
接口私有方法
改进的try with resource
String字符串的变化
JDK10
局部变量类型推断
JDK11
String新增方法
lambda表达式中的变量类型推断
十玖八柒
每天进步多一点
欢迎到访φ(゜▽゜*)♪
最新评论
永恒末匕:

好哇塞,这个厉害

十玖八柒:

测试图片发送

Corwin: @十玖八柒

哎 主要是我的个人网站用的是静态的cos 实现评论框还是有点困难

十玖八柒: @Corwin

评论模块是自己写的,富文本编辑器是封装的Tiptap(这个编辑器非常强大,你可以去看下)

我的
个人主页
站点地图
RSS订阅
导航
十年之约
虫洞穿梭
全站友链
虚位以待
©2020 - 2025 By 十玖八柒 版权所有
豫ICP备20021466号