
文章主要介绍了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次元 ,若本文涉及转载第三方内容,请您一同注明。
知识积累
人非生而知之者,孰能无惑?惑而不从师,其为惑也,终不解矣。
评论区
发表评论
这里还没有评论哦
快来发一条评论抢占前排吧
JDK9
接口私有方法
改进的try with resource
String字符串的变化
JDK10
局部变量类型推断
JDK11
String新增方法
lambda表达式中的变量类型推断