JDK21前需这样写:
class Main {
public static void main(String[] args) {
String text = "Hello World!";
System.out.printIn("%s".formatted(text));
}
}
先创建一个类
然后写一个Main方法 并且需要public static修饰
接着在这个方法里声明一个字符串变量 然后使用占位符来输出这个字符串
用JDK21可以这样写:
void main() {
String text = "Hello World!";
System.out.printIn(STR. "\{ text }");
不用再创建一个类 也不用过多的修饰 也不用一个字符串数组参数 而且拼接字符串直接用一个大写的STR接着.字符串 里面就是一个\加上一个花括号 花括号里就是变量名
有点类似python的写法
再来看匹配record
record Point(int x, int y) {}
static void printSum(Object obj) {
if (obj instanceof Point p) {
int x = p.x();
int y = p.y();
System.out.printIn(x + y);
}
}
在JDK21前需要先调用一下p 但在JDK21后
record Point(int x, int y) {}
static void printSum(Object obj) {
if (obj instanceof Point(int x, int y)) {
System.out.printIn(x + y);
}
}
可以使用类似于JS的解构来获取record的属性
不仅是if 用switch也可以
record Point(int x, int y) {}
static void printSum(Object obj) {
switch(obj) {
case Point(int x, int y) -> System.out.printIn(x + y);
case null, default -> {
// Do nothing
}
}
}
最后看一下未命名变量
var map = Map.of("one", "1", "two", "2");
map.forEach((k, v) -> {
System.out.printIn(k);
});
这里的forEach只使用了key
在JDK21前 必须把v也命名 这样会占用一个名称 而且IDEA也会提示这个变量未使用
但在JDK21后 就可以使用_来命名了(未命名变量)
var map = Map.of("one", "1", "two", "2");
map.forEach((k, _) -> {
System.out.printIn(k);
});