JDK17上手,新特性让你起飞
Java8从14年发布以来已经经历了8年的厮杀,最终拼杀了Java50%的市场,可谓打遍天下无敌手。但是,随着JDK17的发布,Spring6的更新,Java8受到极大的挑战。这里我引用oracle官网的一张版本支持的线路图
我们可以看到,JDK17也是官方提供的LTS版本,支持到2026。并且随着Spring6、SpringBoot3的更新,JDK17在未来肯定会一点点侵蚀Java8到市场。现在就让我们一起来了解一下JDK17一些实用的新特性。
-
新增var关键字
var是Java10新增的关键字,可以更简洁的方式声明局部变量,它可以自动推导变量类型
public class VarTest { public static void main(String[] args) { var str = "1"; System.out.println("var出来的string:"+ str); // var出来的string:1 var num = 1; System.out.println("var出来的int:" + num); // var出来的int:1 var arr = new int[]{1, 2, 3}; System.out.println("var出来的array:"+ Arrays.toString(arr)); // var出来的array:[1, 2, 3] var list = getList(); System.out.println("使用var接受方法返回值:" + list); // 使用var接受方法返回值:[1, 2, 3] } private static List<Integer> getList() { List<Integer> list = new ArrayList<>(); for (int i = 1; i <= 3; i++) { list.add(i); } return list; } }
-
switch加强
switch表达式先后经过Java1.5、Java1.7两个版本的增强,到Java8的时候,支持byte、short、char、int、枚举类型、String类型,但是我们每一个case都要 break或者return,不然switch会依次执行每一个case。相信很多小伙伴在刚接触的时候心里都发慌。好在JDK14帮我们解决了这个问题,我们不用使用break或者return也可以了。
public class SwitchTest { public static void main(String[] args) { var type = 8; switchTest(type); } private static void switchTest(int type) { switch (type) { case 1 -> System.out.println("星期1"); case 2 -> System.out.println("星期2"); case 3 -> System.out.println("星期3"); case 4 -> System.out.println("星期4"); case 5 -> System.out.println("星期5"); case 6, 7 -> System.out.println("周末"); default -> System.out.println("输入错误"); } } }
-
字符串加强
字符串加强是JDK15提供的功能,意在简化json、标签的书写成本
public class StringTest { public static void main(String[] args) { String str = "{"id":1,"name":"泉泉"}"; System.out.println("普通字符串:" + str); String jdk15JsonStr = """ { "id":1, "name":"泉泉" } """; System.out.println("jdk15字符串加强:" + jdk15JsonStr); } }
-
instanceof加强
instanceof加强是JDK16提供的特性,可以省去类型的转化
public class InstanceofTest { public static void main(String[] args) { var data = getData(); Object key1 = data.get("key1"); Object key2 = data.get("key2"); // 传统写法 if (key1 instanceof String) { String str = (String) key1; System.out.println("key1是字符串:" + str); } if (key2 instanceof Integer) { Integer num = (Integer) key2; System.out.println("key2是Integer:" + num); } // jdk16简化写法 if (key1 instanceof String str) { System.out.println("key1是字符串:" + str); } if (key2 instanceof Integer num) { System.out.println("key2是Integer:" + num); } } private static Map<String, Object> getData() { Map<String, Object> data = new HashMap<>(); data.put("key1", "aaa"); data.put("key2", 111); return data; } }
JDK17带来的更新远不止这些,以上只是我们常用的一些特性,JDK17还有更多性能方面的提升,比如JVM和GC,当然还有强大的ZGC,随着JDK17的普及,后面我们一起深入探讨。