00:00
一个话题,那下一个话题呢,给大家讲的是属性的高级部分,大家还记不记得我在讲属性的时候,曾经留了一个尾巴,或者说留了一个,呃,留留留,留了一个小坑在这等着大家呢,在这我在讲属性的时候,我曾经说了这么一个东西。我说了这么一个东西,哪里呢,在这儿。诶,好像还不在这儿吧。诶,我在哪个地方说了一下属性高级部分,我要在,哎在这大家看这样,我在讲属性的时候,说属性有一个高级部分,它这个部分呢,跟构造器有密切关系,只有你把构造器。听了过后呢,你才能理解这一部分知识点,好,现在我把这一部分给大家补上,那么回到这个是回到我的这个幻灯片来看一下,前面呢,咱已经讲过这个属性了,没毛病,都是这个基础部分,现在呢,我们对属性内容再做一个简单的加强,什么加强呢?注意听这句话啊,呃,构造,构造器的这个参数。
01:02
如就是对这个构造器参数什么撕开了内中的主构造器的函数的这个主构造器。那就写这个啊,主构到期的行参,如果没有用任何的修饰符修饰,那么这个行参就是一个局部变量,怎么个意思呢?就是说这个意思啊,同学们,比如我们就拿这个说话。我们我们就拿我们先写一个吧。啊,先写一个。好,我们先写一个不着急啊,DEMO04。因为这些知识点你要没有没有讲过呢,后面你们写东西就是看这个Spark的Spark这个源码你肯定是看不懂的,好所以说咱们不着急,我我写一个这个新的一个类吧,叫worker。Worker,好,同学们,大家看到这里好,那么假,假如我们这个地方有一个name啊,假如我这样写的啊,VR name,我就简单写这么一个东西。
02:00
Name,好,我这里面传进去一个in name,注意听使寸好,各位朋友,我把这个in name呢给到他,好同学们看,如果我这个主构造器的这个行参。我没有用任何的这个修饰符,那么这个内就是一个局部变量,用完就完了,用完就完了,所以说这个地方我们说到是这里就是如果。如果这个in name没有任何修饰符啊,没有,是这样写的。如果我们的主构造器这样写,如果主构造器是这样写的,这样写的,那么那么注意听,那么我们这个in name in name。就是就是一个。变量就是一个局部变量,就是这个它阻够器里面可以用的一个局部变量。局部变量,它的范围就在这个主构造器内,除了这个主隔器用不了啊,啊就是它就在这个是个局部变量,是个局部变量,那么如果我们这样定义呢?好,同学们看我的第二个细节,如果。
03:11
如果我们这个地方用了V关键词来修饰和说明,那么撕开了,将这个参数作为类的一个私有的只读属性来对待,也就是说它会自动的把你的这个变成一个私有属性。那么我再举一个例子,比如说我这样写了啊。啊,这样子,嗯,我干脆新建一个类吧,不然的话放在一起大家看起来有点多,有有点糊涂啊,写个二,这次呢,我换一种写法。Val。那么这个时候各位同学如果是这种写法的话呢,各位。如果是这样一个写法。这样一个写法,那么我们的这个名字就是你们看到这个in name呢,它就会成为这个WORKER2的一个。
04:01
私有属性,而且呢,是只读的私有属性。啊,这个联就是就是谁呢?就是WORKER2的,WORKER2的一个什么呢?私有属性。私有的只读属性。只读,只只能读,不能用只读属性,那么我们来玩一把,我们来玩一把,来看同学们,我给大家创建一个worker。六一个worker好写完了,呃,写这个地方我传一个,随便传一个东西啊,比如说这个worker的名字叫史密斯。好,同学们可以看到我用worker点的话,其实我只点出来一个name,点出来这个name,但没有把这个in name点出来。没有把这个name点出来,就说我这样点的时候,大家看我只访能访问到这个name,因为name呢就是它的一个属性,这是没问题的,但是你访问不了。不能访问,不能访问什么呢这个字。好,这是肯定的,好,我再写第二一个,同学们可以看到,同学们可以看到,好,如果我这样写啊,写个WORKER2这边也改成二。
05:08
史密斯,怎么也改成二,大家注意看到此时此刻我来访问的时候,我能访问到什么呢?Worker。点。诶,怪了,In name和name都能访问到。哎,为什么呢?好,同学们可以看到啊,这两个我均能访问到,那现在呢,这个地方之所以能访问到,它就变因为它在这个底层做处理的时候,它会把它当成一个属性来对待,好我们现在来看一下反编译它的源代码,一目而了然,好,我们来做一下这个源代码的就是反编译的工作。这个大家一看就知道了,好,就是这个地方就可以访问到它。可以访问什么玩意儿呢?因为它已经变成了一个只读的私有属性来运行一下。朋友们请看代码。同学们请看代码,好,现在呢,我直接看我们的这个worker和WORKER2这两个类,好,这两个类好打开我们的这一个反编译工具,不着急啊,我们快速的大家看一下,那么这个时候呢,我们直接看我们的WORKER1和worker啊这这没有WORKER1,只有个worker,没有WORKER1,我看是不是我这名字取的是对没没有WORKER1啊好,同学们,我们先看第一个,同学们可以看到这里面呢,没有那个name的出现没有。
06:27
没有好,我们再看第二个,好,当我们看第二个,我们突然发现有个内,这个内的确是个私有的,但是你之所以可以访问到它的根本原因是因为他提供了一个这样的方法。再看这里。而且他只提供了一个只读的方法。没有提供这个写的方法,这样大家一定要很清晰的知道啊,就以后大家看到这个逻辑,看很多写源代码的人,他就直接加了个简单就写了VR了啊,一看就知道哦,它是一个属性,而且是只读的属性,所以你只能读,但是不能写,你看看你这样读是可以的,但是你要给他一个值,立马报错。
07:09
好,这是第二个特点,我们再写第三一个啊,在这个地方是我们再上第三一个快速的手下,假设我又有一个WORKER3来,朋友们,那这个时候呢,我把这个换成了R,好,各位同学,那如果说我这个主构造器是这么写的,它会怎么办呢?好,非常的简单啊,这个地方它就是指它就是一个私有的可读写的属性了,那么in name就是WORK3的一个属性。一个什么呢?一个一个私有的啊,就是private可读写的,可以读写的属性,好这个就讲完了,那么我们来再看一下work worker3是不是这样子的,快速走一下啊VL worker3。等于有时候你也可以这样写,你看有些程序员呢,这样写,写这个代码也是可以的啊,Worker。
08:03
包起来,然后地方哎,WORKER3。三然后传了一个,比如说Jack对吧,点是这样呢,它会直接提示给名字,你们应该用过这个是吧。是吧,以前你们用过这个吧,应该没有用过,再再再看,就说以后为了命名,命名快捷的话呢,可以这样玩,就是把这个写完,写完过点VR,如果你将来想定义这个VR,这样一回车啊,这个地方过来就行了,很快好同学们我们来看看,这个时候呢,诶,我们看底层它生成的是什么样子的,跑一下就行了。Lawyer啊lawyer来,现在呢,我们把这个有时候要关闭一下,因为它不这个工具反编译工具不自动刷新,呃,有点有点不好啊,我们打开WORK3。哦,同学们一看就明白,哦,原来如此,你看看有意念吗?但是呢,他提供了一个读和提供了一个写,这个时候你就可以既读也可以写了,好,这是我们这样一个操作看。
09:03
我先在这写个WORD3。好,In name in name,我给他传一个值进去也是可以的,比如说我把它改成这个什么呢?Mar没毛病,当然我也可以读,当我也可以读,就WORK3点,In也是可以的。好,同学们,这就是我们所说的属性的D啊,这么一个细节,就是如果是VR是怎么回事啊,VL是什么,VR又是什么,全部都说完了,就是三个小型小的细节,最后呢,我们再把这个属性的并说说一下。好,那么这个属性还有一个,呃,属性还有高级部分,就是它可以使用一个注解叫什么呢?叫做并property,这是什么意思呢?就是Java病。的规范规定了Java的属性,像呃JA就说Java病呢,这个规范规定了Java属性可以向这个get什么什么set什么方法,对吧,许多Java的这个框架呢,也依赖于这种。
10:03
来命名规范,比如说你们在学Java e一些框架的时候,一般是这样做的,像eclipse把它全部一选中,单击右键,然后这边就会说你要不要生成一堆set和的方法是吧?诶,这个就是可以生成,那么在这个开里面呢,它也提供了一个快速生成set和get方法,而且几乎都不用你写,它比这个Java那个并还牛,你夹完还得写一下,他写都不用写了,他干什么呢?它直接加一个注解叫并property,那么加上这个呢,会自动的生成规范的set和get方法。这时我们就可以用对象点赛和对象点盖的方法来调用属性,这是一一个需要说的第二点我要说一个注意事项,就是当你加入这个注解以后呢,生成的get和set方法以后,对原先底层生成的。
11:02
那种那种方法,就原先我们底层原先不是还也还要生成那个可读可写的方法吗?也有也有的。你加了这个病属性过后,两者没有冲突及可以共存。再说一遍啊,两者没有冲突,可以共存,那同学们,我快速的给大家写一下这个案例。好,我们新建。一个一个这个东西,我们快速的再走一个,这个叫病。并property案例。好的DEMO快速的给大家演示一下,比如说现在我有我我就不写了,就快速的过来一下就行了啊,懒得写了。直接把这个给大家带过来。把这个带过来。好,我这里呢写了一个类叫car,那么car完了过后呢,这有一个VR name属性,Name属性这个大家都能看懂,我这地方加这个注解呢,它会告诉我缺东西,我直接引进去,大家看这里,我直接引进去就完事了。
12:03
那么这个时候我们主要是要看一下这个car有什么东西了,来吧,我们另一个car。等于new car,好,这个时候我用的是它的主构造器啊主构器,然后呢,同学们看效果car.get哦,Get name有了啊,点set name也有了。它在底层会生成这些东西,同时你原先的这个方法也是可以用的。啊,这这种方法都能用,说我给他一个名字,比如说宝马。啊,宝马我当然也可以获取car name也是可以获取,除了这种方式呢,我们还可以使用,使用什么呢?就是这个b property给我们自动生成的。自动生成的啊,自动生成的,生成的什么呢?Get啊get叉叉叉和set叉叉叉,好,我们来也用一下点set,比如说我会把这个宝马改成另外一个比较奔驰。
13:09
啊,奔驰好,当然我也可以用它生成的这个方法叫get name来获取它,那这个盖盖内就写完了,那这样就拿到他的名字了,也可以用。好,同学们,这两种都OK。啊,同学们反编译一下,如果你们愿意的话,反编译一下,你们会看到name下面呢,会生成这个对应的这个方法,好,这个反编译我就不去做了啊好,到此呢,我们这个属性要说的这这点就跟大家说完了,好我把它简单的给同学们板述一下啊这里呢是对属性做了一个加强啊,它是跟我们的构造器有一些密切关系的。好属性高级部分,那么我们来对它做一个说明,好OK,这是标题二对吧,那了我说了什么东西呢?诶首先呢,我做了一个构造器参数的,就是不同的写法会对我们属性有什么影响。
14:11
好的,这边是我们的标题三。标题三在这里好,然后呢,这边我们做了这么几点说明啊,第一个。第一个,第二个。第二一个第三一个好,这是呃,关于这种这种不同的情况,比如说你没有任何修饰符会怎么样,你用了VR关键字会怎么样,你用了这个VR关键字又会怎么样的一个说明,那么代码呢,也给大家放到这里来。啊,代码啊,代码演示,代码演示给同学们粘贴复制到这,刚才我们写的这段代码呢,应该是在第四一个案例就这啊,我分别举了一个worker worker2和WORKER3,大家应该能够看清楚。好,把代码给同学们板书到笔记中去。
15:00
好O了,紧接着呢,我们又讲了一个什么东西呢,诶,紧接着我们又给同学们说了一下并属性啊,这个也很简单对吧,这也很简单。好,我把它呢给大家板书到这里。并属性,OK,并属性来个标题三好说了两点对吧,说两点就是B属性规范是怎么做的,就是这这地方是关键。啊,这是第一句话,是关键点,第二点呢,呃,没有冲突,两者可以共存,就是原先底层生成的那那一套方法也是可以用的,可以共存。可以共存好,把代码给同学们放过来,哪里呢,就它。啊,大家一看就清晰了。我把这个代码呢给同学们板书到这里。好的同学们,那关于属性高级部分加强呢,我们先先给大家讲到这个地方。
我来说两句