00:00
接下来呢,咱们对这个record啊做一个进一步的解释,通过刚才这样的一个测试啊,大家发现呢,确实这个结构啊,非常的简洁,对吧,它能够提供一种叫更为紧凑的语法,咱们来去声明一个类。就这么一个类,那也就是说,当我们之后再去定义这种叫数据载体类,或者呢,我们称为叫扎in这样的这个结构的时候啊,我们直接用这个record就非常的方便,能够大幅度的去减少相关的一些模板代码。对吧,诶它呢,其实跟咱们提到的,像这个Colin当中的这个data,这个scla中的这个叫case,或者cup当中这个record,包括我们这个long box里边这个data,这个注解实际上呢是类似,但是也不太一样啊,也不太一样,他们的这个共同点是什么呀?就是把这个类当中的部分或者全部的一些状态,一些结构啊,直接生命在这个类头当中。一说到这儿的话,这块的话呢,大家呢,对另外一个结构啊,应该是有一些印象的,是不是叫枚举类啊。咱们定义枚举类的话呢,在这个JDK1.5之后呢,建议大家是不是用这个叫in,或者这个英文这个美音念成叫A是吧,用这个关键字呢,咱们去定义叫枚举类。
01:09
这个结构呢,就非常简洁,不用大家呢自己再去定义了。对吧,那这个结构定义的时候呢,发现很多这个前面一些修饰啊,确实都不用写了,就类似于咱们现在说的这叫record一样,都是属于类中的一种,叫受限形式形式。包括呢,这个E关键字咱们定义的时候呢,它的父类呢,就是咱们定义这个酶集类,是不是父类也默认呢,相当于是继承了叫这个大写的E的这个的一个类啊。哎,如果大家你不清楚的话,你写一下,然后你写一下,然后你看下它的负类你就知道了是吧,它那负类呢,就是我们说这叫这个类。啊,其实呢,还可以理解成类似于谁啊,咱们这个我就写到这了,这叫对吧,咱们是不是定义这个接口的时候呢,用的叫interface啊,咱们定义类呢,叫class,那接口呢,嗯,大家也可以理解成是一个极特殊的一个类,或者呢,它已经不是一个类了,对吧?那们这个接口里边,咱们如果定义一个方法,通常我们说在八之前是不是都是抽样方法,那你前面的public obstract都可以省略掉。
02:08
那么你要定一个这个所谓的这个叫变量,咱们不是叫变量,它其实是个常量,哎,我们说都是叫全局常量,都声明为public static final的,像这些呢,都不用我们写,因为呢,哎,你是在接口中的,所以都可以省略掉,都可以理解成是一种叫受限形制。那我们这个record呢,只不过呢,它省的是不是就更夸张一些而已,对吧,诶是这个意思啊好,那这呢,我们是关于这个record声明完以后呢,它的一些特点。它的一些特点,大家这块呢,也关注一下,就是我们看到它这个类本身呢,是一个final的是吧?行,那除了这个之外呢,我们说额外的我们还可以在这个record生命这个类中啊,咱们去定一些其他结构。比如说静态的字段,静态的方法,构造器,实例方法等,这呢写了很多,同时呢,也不能够去定义什么,不能够声明为什么,咱们统一的来说明一下。
03:00
也就是我们打开这个以后呢,这个结构呢,说我们还想加点东西,能加什么对吧,是这个意思啊,说我们还可以声明叫静态的属性。静态的方法。还有呢,这个构造器。以及呢,我们称为叫实例方法,这呢是我们可以声明的,咱们先说说这个事儿,那比如呢,提到一个这个静态的结构,OK,那咱们就定一个,比如说我定一个public,这个static,嗯,死政类型的,比如我们称为叫nation。叫国籍好,我们写一个public static,这呢我们就调用,相当于是提供它的一个这个get方法,我们叫。在这里边呢,我们就直接return一下,这个叫内,OK,没有问题是吧,那这呢就相当于我们定义了这个叫静态的属性,这呢叫静态的方法还可以来定义构造器。
04:04
构造器这块我们说其实这块我们相当于已经提供了一个构造器了,是这意思吧,呃,这里呢,我们说还可以再去提供了一个其他的重载的构造器,比如说public,我呢叫person,就写一个死针形的name,在这里边直接我们调用一下当前重载的叫name,这让我写个no。能理解吧,既然我能这样写,说明当前这个类中就有一个两个参数的构造器,其实呢,就是我们这个构造器,也是我们这个反编以后呢,大家看到了我们这个构造器。OK的是吧,没问题,这定义构造器,然后实例方法,比如我这块写一个这样方法,返回值呢是一个string,我们叫get。Name in upper case,将我们这个姓名啊转换成大写,比如说我在这边直接return一下当前对象的这个name属性点,叫to upper case。没问题。行这块我就写完了,那写完以后的话呢,我们很显然呢,是不是就可以在我们这里边儿呢,进行一个测试使用啊好,我再写一个单元测试方法。
05:05
那这呢,我们比如说先造一个对象,用一个person,这里边儿呢,我就用那个一个参数的构造器了。嗯,罗密欧,朱丽叶,咱们国内呢,叫梁山伯与祝英台吧。梁山伯与祝英台,祝英台是女生对吧,你看这里边儿咱们写的是不是俩构造器啊,咱用上面那个叫祝英。台这里我都写的是这个小写,没问题,通过这拼音啊,咱们去调这个叫get name in upper case,是不是就把它转换成这个大写了,我们做一个输出。没问题,然后呢,咱们还有啥结构,还有这个静态的,静态的咱们就直接来了P一点,或者我们直接呢,通过这个person类点就行,叫show nation,这说明于咱们没有给它赋值对吧。没赋值,咱们先赋一个值吧,Show这是调了一个方法,提前呢调属性。Person类,第二,我们叫它的nation,咱负一个值CHN。
06:05
哎,中国对吧,好这呢,就来调用咱们刚才测试的这些结构,OK,执行一下。哎,刚才编写的这个结构来进行一个测试,嗯,这呢是构造器,这呢是获取它的名字的大写,这就是大写的,然后呢,下边呢,获取它的这个nation上面复合值,这呢就C没问题对吧?这呢是我们额外的还能定义哪些结构,给大家说了一下,那能定义哪些结构,那不能定义什么呢?我们说不可以声明叫非静态的属性,比如说我们声明一个叫private。比如说叫因特型的,我们称为一个叫ID,这个呢是报错的。这个注意是不允许的。这要注意一下,这是第一个问题,那第二问题的话呢,又提到说不可以将这个结构。将record声明的这个类这个。
07:05
生命为有点绕啊,不能将我们定义的类吧。定义的类说声明为什么呀,叫abstract abstract。是吧,这个意思行,比如说我这块呢,再去定一个叫record。这个呢,我们再换一个,比如我这个叫类。注意这样写呢,你看是错的啊,这个后边呢,记得加一个小括号。接着加个小括号,这个呢也是一个特殊的一个情况,就相当于这个类呢,我们这样写是不是就定义了一个叫空参的构造器啊,所以接着把这个小括号呢给加上,这呢就是两个参数的构造期嘛,很好理解啊,大家有开发经验的这一说应该都明白,那此时呢,前边我们就不可以再去用abstract去修饰了。那如果修饰以后呢,大家会看到这块是不是就报错了,说那你这块不能去允许放在这儿,那为什么呀。大家反编以后呢,你会发现我们这个生成的这个person类呢,它是不是已经加了个final啊,Final就是不能被继承了,而我们要声明成你又又又加上abstract,是不是必必须要被继承。
08:10
这呢就是咱们Java语法当中讲到的abstract跟final是不是水火不容啊,他俩呢是不可以同时存在的是吧?是这个原因啊,同时的话呢,再说一个点不可以给。给咱们record定义的类。去明一个显示的负类,或者显示的这个非这个我们这个类。明显示的负类,这个呢,我们是非record类,这个大家一看有点是吧,这个意思啊,我这呢定一个叫record,嗯,比如我这块还是叫一个order吧,对吧,那一个小括号,一个大括号,本来这块呢挺好的,然后你非要在这块给他写一个继承的一个负类继承鱼,嗯,继承鱼我们写一个,我这随便写个吧,比如说这个县成对吧,继承这个riad,我这块写完以后呢,这块就报错了。
09:07
说呢,不允许这块呢,去写这个继承,不能有继承的这个从句,那我这块我写一个他呢。写了record record record record本身呢,这块还得。Out enter一下我们看看也不行是吧,嗯,这块你就别写了,就是整个呢,我们就不要求咱们这块呢去写,嗯,这个主要原因是什么呀,其实这个事呢,也非常简单啊,刚才大家也看到了我们这个person类,它呢是不是已经继承了这个record这个类了,而且还是咱们放到浪保下的啊,你点开呢,是在我们14当中添加的这个新特性。真的是一个新的一个类,对吧,它已经有这个负类了,那你就不可以是不是再继承其他类了,这就是我们所谓的是不是叫Java类的一个单继承性啊。就跟咱们前面说的那个innu或者叫an是不是一样啊,这个枚举类呢,它的父类呢,就是这个结构,你就不要自己闲的没事就去继承一个副类,显然不对。
10:04
对吧,好,这呢就我们说清楚这个家来定义这个person当中能做什么,不能够做什么,这样的一个情况,大家看完以后呢,应该会感觉很兴奋啊,但是注意这呢还仅仅是我们的一个叫preview,叫预览的特性。但是呢,这个结构可以确定的是什么呀?在未来的版本中一定会被定义下来的。一定会一定会使用的,这个大家不用担心,顶多呢需要对它底层的一些操作呢,进行一些完善啊,所以说大家提前呢,提完以后呢,你自己可以操作一下以后呢,咱们就用还是挺方便的哈,确实如此行最后一个事说呢,在这个JAVA14当中,咱们为了引入这个新的类型。在这个大的class这个类中啊,引入两个方法,分别呢,叫get record components和is record,这两个方法呢,我就不看了,这个我已经看过了,确实有,那么为什么提供这两个方法呢?那你当然知道咱们这个大的class是来干什么用的,当我们使用反射的时候呢,是不是要用到这个大的class啊,所以这两个方法引入呢,也是为了把这个record record呢,引入到咱们这个反射的大的API的这个大家庭当中,方便呢我们在反射当中去使用这个record record,所以这里边呢,诶,我们就引入了这样两个新的方法,诶这个大家了解一下就行。
11:12
好,这呢就是我们第三个这个非常实用的record这个结构。
我来说两句