Java14不得不知的5个新功能

Java14不得不知的5个新功能

虽然我们现在还用的JDK8

文本块

以前在Java里写个长点的字符串是这个样子地:

String sql = "select * from t_tianlangstudio_student" 

+ " where age > 23 and age < 30" 

+  " and  sex = 1";


如果字符串中再包含有双引号还需要转义,虽然有IDE帮忙,但还是时常羡慕Scala、Rust里的文本块(多行字符串)的写法,那个酸爽,Java14里终于也可以这样写了:

public static String  index = """

<html>

<head>

      <title>tianlangstudio</title>

</head>

<body>

      <h1>一个不安分的程序员</h1>

</body>

</html>

""";

是不是清爽多了?

Switch表达式

以前使用switch大概是这个样子地 :

public static int  codeDemo(int i)  {

int result;

switch(i) {

case 1:

case 2:

        result = 18;

        break;

case 3:

        result = 28;

        break;

default:

          result = 100;

          break;

            }

return result;

}


现在可以这样写了:

public static int code(String s)  {

int result = switch(s) {

                  case "a"  , "b"  -> 1;

                  case "c"  -> 2;

                  default -> 100;

        }

        return result;

}


是不是清爽了很多?Java也开始区分表达式和(声明)语句了?关于表达式和语句可以参考Rust.

不过Rust里更多使用Match,Java14也对模式匹配有了些许支持,主要体现在instanceOf的使用上。

instanceOf

使用instanceOf判断一个变量是否属于某个类型的实例的同时,还能声明一个变量作为当前类型的实例进行更多的判断.就像这个样子:

      public static void demo(Object obj) {

              if (obj instanceof String s && s.length() > 4) {

              System.out.println("it is a String and length greater than 4");

                }

      }


没看出哪里不一样了?注意看String s 。可以自行脑补下要使用JDK8编写代码是什么样子的?

record

有没觉得每次定义个(Java类)POJO,需要写大量的get,set方法还得重写equals方法特别麻烦,是不是也想要Scala中的样例类、Rust中的类元组struct那样简洁的类型定义方式?

Java14提供了record,可以这样定义类型了:

public static void main(String[] args) {

Person person1 = new Person("Tianlang", 23);

Person person2 = new Person("Tianlang",  23);

System.out.println(person1.equals(person2));  // true

}

public static record Person(String name, int age){}


就问你清爽不清爽 ?

更有用的空指针异常提示信息

你是否也像我一样经常写链式调用的代码,就像这样:

String str = obj.fieldA.fieldAA.fieldAAA;

这样写起来可以少费几根头发起变量名称,直到出现了空指针异常,异常信息只告诉你那一行出现了空指针,为了调试代码只好类似这样:

System.out.println(obj);

System.out.println(obj.fieldA);

System.out.println(obj.fieldA.fieldAA);

String str = obj.fieldA.fieldAA.fieldAAA;


是否也曾像我一样从心底升起无数个草泥马. 可能是我们的呼唤起了作用,终于在Java14中会告诉你具体那个代码调用出了空指针。记得要在代码执行时设置:

-XX:+ShowCodeDetailsInExceptionMessages

如果你像我一样不想升级JDK又想尝试新的写法也可以考虑新语言如:ScalaRust语言.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352