00:00
那接着来咱们来看第六个新的性,叫做record,这个record呢,这个也是作为第二次的预览出现的,那首次呢,咱们提到record record呢是在JDK14当中,那这呢,相当于又保留了我们JDK14当中提到的这样一个新特性,并没有呢,像我们刚才提到的这个JDC或者是文本块一样,给它呢,正式的啊,写入到我们这个JDK当中,作为正式版,这里还没有,还是一个预览,对吧。所以呢,这里边大家你会看到哈,这个咱们闲扯两句,这个JAVA15虽然说呢,它确实还是如期在九月份发布的,但是呢,整个这个主菜的这个新热性呢,稍微有点坑啊,怎么叫坑呢?你看这个四跟五呢,在前面的版本当中已经都提到过了,而且也做过,呃,有的是还做过二次优化,对吧?呃,甚至多次像我们这个JDC啊,那这里呢,只是做了一个转正啊,正式的写入到我们这个JDK当中了,那这个instance of呢,跟我们这个record呢,这个相当于呢,又是做了一个次的preview。也就是说呢,之前本来也有,现在只是做了一个二次pro view,还没有做一些新的一些功能的添加啊,稍微有点水是吧?那上面呢,提到这个密封类和隐藏类呢,本身也不是说在Java语言中首创的,在其他的语言当中本身也都出现过,比如我们这个密封类啊,包括这个运行当中动态的加载这个类啊等等是吧,都有这样的概念啊,所以说呢,我这里边提到了说JAVA15呢叫波澜不惊,大家呢,就能理解是什么意思了啊,理解什么意思啊,这个不知道呢,是不是由于我们这个疫情的影响,所以说呢,在这个事物当中呢,发布的这个新得性呢,相对来说就比较水一些啊,那这个records的话呢,本身啊,它这个结构呢,还是非常好的啊,在JAVA14当中首次出现啊,当然当时呢也是非常的惊艳啊,那大家呢,不妨也可以看一下啊,当初我讲的这个JAVA14的新特性。
01:45
呃,大家呢,如果有兴趣呢,你可以在商务官网的鼓励学院或者是B站当中,你搜索JAVA14啊,都可以找到这个新特性啊,那在JAVA14当中,我们看一下这个record。实际上呢,还是一个非常重要的一个特性。
02:00
啊,在这儿很多程序员呢,抱怨说Java程序呢,写的太啰嗦了,比如我们想创建一个这个纯数据的一个载体类啊,或者叫个Java b的时候呢,咱们呢,需要去编写构造函数该塞的方法E哈O和to率的方法啊,那这些方法呢,我们在这个编写的时候呢,还得自己亲自去写,挺麻烦的,对吧?当然呢,也有同学说说我们使用第三方这个de,比如说idea啊E呢,咱们可以使用快捷键呢,自动去生成,但是多少呢,感觉有点麻烦。所以能不能更简洁一些啊,这呢就提到了Java诗当中最令人兴奋的,也是最令人惊讶的这个创新就是record的一个引入。那通过使用这个record呢,我们直接呢,可以省略掉刚才提到了这样的一些结构啊,这就是它的一个意义所在啊,这呢也给大家呢,呃,再举了个例子,就是我们以前呢,如果去定义一个point这样个类的话呢,这呢是属性,这是构造器,这呢类似于get方法,这呢是eo的方法,诶下边呢这是诶high code方法,这呢是图存方法,但如果我们用record去写的话呢,一行代码就搞定。
03:04
啊,可见呢,非常的简洁对吧。在咱们这个JAVA15当中呢,其实没有在14的基础上呢做一些调整啊,所以呢,又重新的只是做了一个延续啊,大家呢有有的呢,可能没有怎么用过啊,或者呢,有的也没听过这个JAVA14这个record record的新特性,那这里呢,不妨呢给大家呢就来举一个例子啊,或这呢在Java一下呢,去创建一个注意创建一个record。那这时候呢,我们命名为,比如说叫做customer。好,这个呢,大家会看到我们声明这个结构呢,使用那个关键字叫做record来进行声明的,对吧?然后在它这个类名和大括号之间呢,有一对小括号,这个小括号里边写的是什么呢?就是原来我们定义一个数据类的时候呢,呃,相对应的一些,呃,非静态的这个实例变量。啊,非静态的这个实例变量啊,那我们呢就可以,哎,非静态的其实就是实例变量是吧,非静态的乘以变量啊,哎,这个非静态实例变量有点重复了啊,在这个小括号里边,比如说我们定义这个词缀类型的内幕。
04:02
啊,或者说我再定一个custom类型的。啊都可以啊,比如说叫partner。啊都OK好,这时候呢,我们就写完这个类了,大家说这这这太简单了是吧,那我写完这个类之后呢,大家在这儿呢,做一个re compel。啊,相当于我们做一个编译对吧,编译完之后呢,当然你打开我们这个啊,生成的代码刷新一下。找到我们这个customer,双击打开,好,这时候呢,大家你会发现咱们看到的这个字节码文件给我们反编译之后呢,生成的这个customer呢,它继承于record。啊,这个有点像咱们说那个innu是吧,那枚举类啊,Innu关键字的话呢,是不是也继承于那个innu那个类啊,啊有点像啊,然后在这里边呢,你看他给我们提供了这两个属性,这两个属性呢,恰恰的就是我们刚才卡后边呢声明的这两个字段。那这两个字段呢,就对应了我们这两个这个实例变量对吧?哎,这注意这里边声明成是final的啊,然后呢,还给我们提供了一个两个参数的构造器啊,这个构造器呢,参数的类型其实就参照我们这里边这个属性。
05:09
啊,或者叫乘以变量啊,然后再接下来呢,提供了toth润提供了哈code和eo方法,提供了下边name和partner这两个方法,这两个方法呢,类似于我们针对这两个实例变量的,哎,叫钙的方法。啊盖的方法啊,就是这样子的行,那我们原来呢写的很复杂,现在呢,就用这样一个简单的结构呢,就可以去体现了,那接下来呢,咱们做一个简单的测试。Record,一个test。好在这呢,比如我写一个这个方法啊,首先呢,我们创建一个customer的一个实例。哎,另一个customer对吧,然后这里边比我们写上叫哎罗密欧。好,逗号在后边呢,第二个参数呢,又是个customer类型的,比我们用一个customer啊写成一个,哎,朱丽叶。哎,他那也需要customer这呢,我们就直接诶给个now就行,好这样的话呢,我们就创建了一个customer的一个实例了,对吧?好创建好这个实例之后呢,我们首先呢,来看一下,哎,它是不是帮我们自动的去重写了这个突资人方法做一个执行。
06:14
没有问题,这个呢,我们打印出来这个CUT1调的通用方法,跟我们自己去实现的是不是套路是一样的呢,是吧,好,这是这个事,然后以及的话呢,我们通过这个cut一点,咱们去调这个叫诶name。这样一个方法。然后呢,再接着呃,调它这个叫partner这样一个方法,好,那这两个方法的调用呢,类似于我们之前针对于这个这个叫实例变量,他们的这个钙的方法是吧,来这一个这一个啊来我们这来写一个。它呢,类似于啊原有的。哎,针对于实例变量的。这个钙的方法。嗯,下边这个呢,也是一样子的啊,只不过在这里边你不用写盖内或盖他那了,直接呢就以这个变量名来声明的这样的方法。
07:06
好,这是这个问题,还有什么呢?我们刚才提到了,是不是还涉及到这个哈希code和这个equal方法的一个重写是吧,那这块我们怎么去验证呢?诶可以这样子啊,那比如我们这儿呢,去创建一个叫哈希set对吧,里边呢我们存放这个customer。哎,Set啊,你一个,哎,具体的哈,1SET我们往这里边呢,去添加两个对象啊,其中一个对象呢,就是我们这个一。对看一,然后我们再添加一个,这呢,我们把这个CUT1呢再复制一份。那我放这个叫做卡二。哎,set.at我们把这个CUTS2呢,给它扔进去,那放了两个对象,那我们知道set的主要特征呢,就是不能够存放相同的数据,那我们这里边cut cut2如果按照重接以后的哈的和equals的这个角度来看呢,它俩是不是应该算相同的了,那就意味着当我们去遍利一下咱们这个set中的数据的时候。
08:06
哎,我们发现里边呢,你看有几个啊,这呢,我使用了JAVA8当中提到这个方法引用啊,编了一下里边这个数据执行。好,大家看这种里边是不是只有一个数据啊,那沿IG呢,就是我们存放的第二个数据呢,就没进去啊,因为呢,我们按照哈1CODE和e code的方法的这个逻辑呢,它俩呢就算是相同的数据了,那进而呢,咱们证明确实呢,是不是把这两个方法给重写了是吧?哎,这呢就是重写的这个逻辑啊。好,这呢,就是咱们提到这个record,现在呢,大家会发现呢,啊,原来这么简洁就可以做到,原来用很多代码呢,呃,写的那个逻辑了。OK,这呢是我们要讲的这个record第一个层面的啊意思,然后第二个层面呢,大家会发现我们在这个record这个大括号里边呢,现在咱们什么也没写,实际上呢,它也可以是不是写相关的一些逻辑啊,那我们下边就要考虑还可以写什么,我们说呢,此外啊,还可以哎声明啊,一个呢,叫做构造器啊声明静态的这个。
09:06
呃,变量啊,还有呢,静态的这个方法还有呢,比如我们这个实例方法。啊,这样的一些结构,好,那我们一个一个来说明,比如说呢,还可以声明构造器,比如说我现在呢,声明一个customer的一个参数的构造器,我这里边儿就写一个词锥形的name。这样子是吧,你那这时候我刚写完,他报错啊,嗯,报错的话,他说嗯,需要我们去使用这个,你这个嗯,Record里边声明那个构造器啊,就是这个意思啊,我们需要用下this啊name,比如这写个no。咱们的生成这个,呃,里边呢,是不是自动把我们生成个两个参数的构造器啊,那我们这样调用一下就好了哈,这个呢是构造器的情况,然后静态的变量也可以声明,比如我这写个public。呃,Static,那比如说string类型的啊,Infer啊,这是可以是吧,这是静态的这个变量啊,还可以声明这个静态的这个方法啊,比如word。
10:06
啊,一个受。嗯,这个,哎,我是一个客户。那这样是不是也可以啊,这呢就静态的这个变量,这呢是这个静态的方法,还可以声明这种叫实例方法,比如说我们声明public word,我写一个叫嗯,Show name。说我的名字是,嗯,咱们把这个内幕属性呢给他拿过来,对吧,当然了,你要调这个内幕方法呢,是不是也可以啊,返回的也是你这个内幕的这个,呃,实例变量OK,那这呢都没问题啊,这呢,现在这种实例方法里边呢,你可以调用其他的方法,或者说我们这个当前的类当中的这个,哎,实例的变量啊,都OK啊行,这呢是我们说的这些结构,那需要注意的问题是什么呢?就是不可以在record record当中。哎,这个我们,诶我用双击这个shift,它就变成搜索了啊,不可以在record当中去嗯定义非嗯这个实例,呃,不不可以去定义这个实例变量啊,不可以在rap当中再去定义实例变量,那我们能定义静态变量,但是不能定义实例变量,那比如说我声明一个public啊,In的类型的一个ID,那这时候呢,就报错了是吧,就这意思,那不能声明实例变量,那实例变量要有怎么办呢?你是不是声明在我们这个customer这个record后面的这个结构当中就行了。
11:34
放在这里边就可以了,对吧,哎,就是这个意思啊好,这呢是我们提到这个record这个特定特点啊,除了这个之外呢,其实还有两个点需要注意,就是我们这个record它呢,哎,不可以声明为啊叫object。哎,他呢,不可以声明成abstract。比如说啊,我这呢,声明一个叫record record,我们比如说叫一个user。
12:00
嗯。那这个小框这大块这呢没问题对吧,当呢,我们把它呢声明成abstract,哎之后,那这时候呢,它就报错了。啊,就提示呢,我们这个呢,是不能够被生命成这个abstract的啊,这个要注意,这是其中的第一个点,然后第二点呢,我们这个record。那它不可以显示的啊,这个声明它的负类。啊,或者叫不能显示的继承于其他类。对吧,比如我们这呢,我们还是啊record,我定义一个叫做啊user,让他呢去extend,那都不给我提示了是吧,比如我们想让它呢,是一个多线程的,那我们去形成这个thad。啊,在这个位置啊,你在这个位置,或者我们考虑说啊,我在这个位置啊整个小括号,哎,你看这时候呢,也是不允许的啊这个呢好解释,因为呢,我们会看到咱们呢提供的这个record是不是已经有天然的一个负类了啊,你再让他去继承其他福类,这也不靠谱吗?
13:04
OK吧,嗯,好,这呢,我们把它注释一下。行,这个呢,就是我们说的这个record record的这样的一个声明啊,所以这儿呢,大家应该也能看到啊,这个结构呢,确实呢是非常的简洁的啊,那虽然说我们当前这个record呢,仍然是一个预览版,但是可以确定的是呢,在我们JAVA16或者17当中,它一定也会被固定下来,所以说呢,大家如果在呃JAVA14啊,或者你之后的版本中,你要是使用这个呃Java宾的话呢,诶你可以呢,完全的去用这个record啊,是没有问题的啊,是没有问题的。好,那这样话呢,咱们就把主要的这六个新特性呢,就给大家介绍完了。
我来说两句