Java 10~13新特性
Java 10新特性
局部变量类型推断
在jdk10以前声明变量的时候,会像下面这样:
String oldName = "jack";
int oldAge = 10;
long oldMoney = 88888888L;
Object oldObj = new Object();
上面声明的时候使用了4种不同类型的变量,在jdk10中前面的类型都可以使用var来代替,JVM会自动推断该变量是什么类型的,例如可以这样写:
var newName = "jack";
var newAge = 10;
var newMoney = 88888888L;
var newObj = new Object();
注意:
当然这个var的使用是有限制的,仅适用于
局部变量
增强for循环的索引
普通for循环的本地变量
不能使用于方法形参,构造方法形参,方法返回类型等。
除了上面的新特性之外,还对jvm进行了一些优化,这里就不罗列了。
Java 11新特性
直接运行
在以前的版本中,在命令提示下,需要先编译,生成class文件之后再运行,例如:
javac HelloWorld.Java
java HelloWorld
在Java 11中,可以这样直接运行,当然这样直接运行是不产生字节码文件的
java HelloWorld.Java
String新增方法
strip方法:可以去除首尾空格,与之前的trim的区别是还可以去除unicode编码的空白字符,例如:
char c = '\u2000';//Unicdoe空白字符
String str = c + "abc" + 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 = "seven";
System.out.println(str.repeat(4));// 重复输出seven 4次
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("seven",1024);
Java 12新特性
升级的switch语句
在jdk12之前的switch语句中,如果没有写break,则会出现case穿透现象,下面是对case穿透的一个应用,根据输入的月份打印相应的季节。
int month = 3;
switch (month) {
case 3:
case 4:
case 5:
System.out.println("spring");
break;
case 6:
case 7:
case 8:
System.out.println("summer");
break;
case 9:
case 10:
case 11:
System.out.println("autumn");
break;
case 12:
case 1:
case 2:
System.out.println("winter");
break;
default:
System.out.println("wrong");
break;
}
在jdk12之后可以省略全部的break和部分case,这样使用
int month = 3;
switch (month) {
case 3,4,5 -> System.out.println("spring");
case 6,7,8 -> System.out.println("summer");
case 9,10,11 -> System.out.println("autumn");
case 12, 1,2 -> System.out.println("winter");
default -> System.out.println("wrong");
}
这个是预览功能,如果需要编译和运行的话需要使用下面命令,预览功能在2个版本之后会成为正式版,即如果你使用的是jdk14以上的版本,正常的编译和运行即可。否则需要使用预览功能来编译和运行
编译:
javac --enable-preview -source 12 Test.Java
运行:
java --enable-preview Test
Java 13新特性
升级的switch语句
jdk13中对switch语句又进行了升级,可以switch的获取返回值
示例:
int month = 3;
String result = switch (month) {
case 3,4,5 -> "spring";
case 6,7,8 -> "summer";
case 9,10,11 -> "autumn";
case 12, 1,2 -> "winter";
default -> "wrong";
};
System.out.println(result);
对于jdk15之后的版本可以直接编译和运行,否则需要使用下面命令执行该预览功能
编译:
Javac --enable-preview -source 13 Test.Java
运行:
Java --enable-preview Test
文本块的变化
在jdk13之前的版本中如果输入的字符串中有换行的话,需要添加换行符
String s = "Hello\nWorld\nLearn\nJava";
System.out.println(s);
jdk13之后可以直接这样写:
String s = """
Hello
World
Learn
Java
""";
System.out.println(s);
这样的字符串更加一目了然。