跳至主要內容

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);

这样的字符串更加一目了然。

seven97官方微信公众号
seven97官方微信公众号