00:00
这上硅谷的老师第一堂课是最累的啊,如果要严格的讲的从呃,八点半讲到。讲到09:50,一共是80分钟啊。这个第一天第说第一节课是最累的,以前你们老海波老师也是这么干的吗?啊啊海波老师还是比较狡猾的啊,先上半个小时自习,先上半个小时自习,但是我们这个知识点没他做项目可以,因为做项目呢,这个我讲一个讲一个知识点,你们可以拿去做这个,这个语法就没办法,我不能说语法让你们自己去看,对吧,所以说这个只能这样子的,大家理解一下啊,啊,其实我也想让你们自信啊,我们接着往下看,那下面呢,我们再看一个特别重要的东西了,这个叫样例类特重要,好,样例类特别的重要,为什么呢?因为你后面用的特别多。那么看样力是干什么的呢?大家看啊,我们学到现在,我们学到现在你看啊,我们连一个Java里面的一个简单的克隆我们都做不到,发现没有啊,你看你们原先学Java一个克隆就能克隆一个对象,我们现在还没学呢,这个些功能都放在样例类里面了,那我现在呢,马上来先来一个快速入门案例。
01:06
样例类,听这个名字啊,样例其实以样例在某个程度上,在我们中国的国话里面呢,也可以理解成模板,哎,是不是啊这个意思啊,那这个这个模板大家模板大家肯定就理解了,哎哎,这个我一听就是哦,样例类模板类有点像呢,那就意思说这个类是什么类呢?就说当你。创建一个样例的时候,它有很多的方法就已然给你提供了,就你不用写,他就已经有了,其实就是这个意思,我们原先写的这一类类呢,其实你没有加样例的话,它就是个空的,里面啥没有。那。这个设计者,呃,干设计者他也知道有很多情况下,我们有一些方法是肯定都有的,那既然如此,没有必要让所有的程序员重新再去写一份嘛,太累了,所以说这个,呃,马丁呢,他就设计一个叫做样例类的名字,这个样例呢,就是case啊,样例的case,呃,其实我们中国中国人更好理解是模板类,但是它的名字叫样例,我们就沿用了样例类这个称呼,说白了简单说一下,就是说我们生成了样例类,其中有很多方法,重要的方法,比如像图斯顿哈希code copy。
02:17
Apply only,哎,这些全都给你了。全都给你了,所以说呢,这个就可以在一定程度上减轻我们程序员的工作,就是那种重复性的没有意义的工作,就给你减少了,它的价值就在这里,没有别的啊,就这么一个价值,那么我们现在明白了样例的大概的这个,呃,概念呢,我们来一个快速入门案例,来演示一个基本使用,同学们看我这里呢,写了一个抽象类叫amount抽象的,我我我写了一个抽象类啊,然后我这有个样例类叫Dollar美元,美元呢有一个构造器啊,写了一个构造器传一个值,我就给你构建,构建一个美元内美美元的对象,我继承了amount,那么这个就是一个样例类,这个样例后面呢。
03:03
是空的,里面没写东西,所以说这两个大括号可以去掉,就是就好像同学们再去,呃,搞一个类的时候,比如说我在这写一个类class dog。好,假设这个dog里面没有任何内容,其实这个大括号呢,是可以拿掉的,理理解意思吧,不要看一个余,诶,这好像是个新的形式,不是的啊啊,就是就是里面是空的呢,它就直接去掉了,就这意思,那么嗯,到我这有个Dollar里面已经写了一个构造器啊,这个构造器,这个构造器它会默认给你生成,这大家看说老师那就又不对了,你看啊,我们原先写一个构造器,你如果这样写。你如果这样写啊,就像刚才我们写的一个K。啊,我这什么都没写,但是我写了一个这个方法,比如说我写了一个叫做这个name。点十。这个方法你看其实它会默认实现一个机制是吧,就是它会默认把这个名字呢当做一个行三,如果我们这样写的话,同学们看有这种写法吧,VR其实这种写法它会默认把你传的这个内容就当作他,其实这里面就隐藏了一些工作,什么工作呢,把这个内容交给你的一个属性,可可读的事情就这样子的,其实这个地方呢,也是类似的一种使用方式啊好。
04:17
然后呢,我让他继承了amount下面这个currency就是货币,那么货币呢,我做了一个扩展,就说你首先给我传一个你这个货币有多少钱,是一块钱还是两块钱,同时呢,把这个单位给我,什么单位呢?你是美元呢,还是人民币呢,还是日元好?同样我也记成amount,也是一个样利类,这又是个样例,样例呢不但可以写在case上,也可以写在object上,但是有一点区别。就是后面呢,同学们看源代码会发现这个object的生成的样例,样例这个类呢,它的方法要少一些,有一些会少一点啊少一点,那么我们来直接运行了,待会儿呢,我们看一下源代码,看看它里面到底生成什么东西就OK了啊好,同学们这段代码呢,我给大家运行一下。
05:04
好,现在讲的是样例类。新建一个文件叫kiss啊kiss class啊,DEMO01。DEMO0一来走一个。好,我把它写到主方法,然后呢,这个代法写这就可以了。啊,这就是一个样命类。样例类下面这个呢,也是一个样例类啊,也是一个样例类,样例类下面这个呢,也可以看作是一个样例类啊,但是呢,它跟这个呃,Class来做的样例呢,还是没有区别,待会我们看一下区别在哪里啊,样例类好同学们,现在呢,我们就不不做任何事情啊,我们直接看源代码是成什么了哈。只写一句哈,好,各位朋友,我们直接运行。我们直接运行好,同学们,当我们这样一直接运行过后呢,你会发现样例内就产生了,注意原先如果我们没有加K这个刀呢,在底层只能生成一个。
06:00
只是不是只生成一个dollar.class啊,但是如果是样例类,它会生成两个文件,一个是Dollar点,一个是Dollar Dollar。dollar.class啊,还有这个currency呢,也会对应两个,那么我们直接打开它的,呃,这个反编译工具lawyer就行了,打开看一下啊好,这个还有点不好看,呃,为什么这个不好看呢?因为我放在就是chapter这边的,可能看起来就有点累。哦,我先看看这样好不好看,不好看,我改一下啊,这个叫idea,然后我们是070205,然后target,然后class,然后common。然后到这来,CHAPTER1212,这面内已经很多了,所以说这样看起来特别的不划算,这样子啊,为了让大家看的更清晰一点,我改一个写法,我怎么呢?我新建一个包。这样子呢,同学们观察起来会比较清晰一点。好,我专门写一个叫样例,样例packet。PKG啊,这个包,这个包呢,我二话不说,把刚才咱们写的这个案例直接扔到这里面去。
07:06
啊,那也就是说此时此刻我们将来生成的,呃,这些样例对底层的代码呢,应该放在一个包下面的,这样我观察起来比较好观察啊,讲解起来大家也觉得清晰一点。对吧,所以说咱们讲课呢,做什么事你得动脑筋,对吧,就是目的呢,就是让大家听,听得更清晰,好还是老规矩重新找一下刚才那个位置。好找到administrator,然后我们的这个这个地方好找零705TARGET到class,然后common,然好找邀请,这样子就好办了,那这里面一下就看出来什么东西了,好同学们可以观察一下,同学们可以观察一下。那现在我们观察一下,首先这个mount当时出现的不说它了,那这个没什么的,好从这两块呢,就是我们这个本身这个opg的运行的,运行的一两个程序啊,大家看currency。啊,Dollar。
08:00
OK。No amount也OK,你看这样子,一旦你是一个样例类,即使你只是写了一个class呢,它也对应了两个文件,那现在我们来观察一下里面到底是什么东西,好朋友们,我们随便打一个啊,我们就把这个,把这个刀打开进去哦,你看明白了,你看原先如果你只是一个普通类,你没什么都没有,现在你看他干了些什么事哦,写了好些函数。哦,怎么懂了?那也是这些方法你就可以正常来用呢,啊哪些方法呢,我们来随便都有,首先我们可以看到它其实去实现了一个product。啊,同时呢,它也序列化了,那我们可以看到你的那个value,就是你的这个玩意儿,就是你刚才写的这个value,这这个啊,它默认直接当成一个什么呀属性了。啊,原先如果如果是这个没有case,其实你这个value不会生就就是一个局部变量是吧,那这个呢,它当做一个什么呢,直接就当做一个属性里面提供方法,我们简单看有on apply。
09:04
由apply。看到没有,这个构建方法就已经给你提供了,那么下面呢,还有像我们经常使用的这些方法,比如说拷贝。Copy也有了啊,拷贝的时候呢,有两个方法可以返回我们默认词,然后呢,再有经典,用经典的用法,比如说比较大小,还有像这个哈西code的图润ES全部有了,也就是说有了这个过后呢,我们比较对象,对象之间的比较,也就可以进行这个比较了,那接到这里面去,还有一个。他虽然虽然做了一些动作呢,他这里面还有一些方法在这里面,还有一些方法在这里面,方法还有什么呢?像我们的这个option,像我们这这些方法,这这个apply这还有,但是这两方法是呃,就是apply和apply是真正写到这的。好,所以说到此,我们可以简单的看出来这个样例类的特色,就是说它会生成很多方法,哪些方法呢,我们给大家总结一下。好,简单总结一下啊,样例类仍然是类,说这点是个大的前提,就千万不要说,呃,样例类是不是里面不能写东西了,你样例类里面可以继续写东西,比如说我我这个Dollar我觉得不够了,我仍然可以往里面写东西。
10:13
我该怎么写还怎么写。只是说有些方法已经给你了,仅此而已,好注意听这句话啊,第二句话,那么样例类中的case适用样例类是用case关键词生命,只要你看case就是一个样例类,那么样例类它主要是为什么作用的呢?这个样例类主要是为模式匹配而优化的一种类。啊,后面会体现出个特点,还有构造器中的每一个参数都是v al的,什么意思?就是同学们看到这个玩意,只要你在这边写,在样例的写了一个构造器的方法,告诉大家它默认都是Val的。而且同学们也看到这个特点的确是如此。啊,你看这个是final是,而且它只提对这个value呢,这个value不就是你的那个那个参数吗?它只提供一个读的方法,你往下面看,只有一个读的方法,没有写的方法。
11:04
啊,你看这个读的方法好,接着看下面第五个,在样例类对应的半生对象中提供apply方法,就是刚才我写的这个东西,就是这个是央力类,它的半身这个刀其实是。它这个样例类对应它直接把办事对象也经生成了这里面真正的play和play写到这,那为什么这么说呢?你看刚才你在这虽然掉了,其实本质掉的是它这里面的方法,好明白这个细节啊,第六一个提供on apply的方法也可以匹配,也就说这这个apply和apply后面它的用处在什么地方呢?将来就可以把这个样例的跟我们那个对象提取对象匹配的个对象提取去结合使用,就功能很强大了。功能很强大了,那啊,它会自动生成,像常用的方法叫图斯润ES哈希扣的拷贝,所以说我这说了一句话说有点类似于模板,直接给我们用就行了,最后除上述外,样例类和其他类,其他类。
12:05
内完全一样,你仍然可以添加方法字段扩展他们。所以说我这做了一个总结,那么关于这个快速入门案例呢,我们就先给同学们聊到这里,聊到这里,然后呢,我这里简单的板述一下这个样例类的一些特点啊,同学们快速的走向,刚才我们讲的是什么呢?讲了一个样例类的快速入门案例,是不是啊,讲了一个快速入门案例,首先。我先给同学们做了一个基本介绍,呃,做了一个样例类的快速入门案例。哎,样例类的快速入门案例在这里呢,我写了一段代码。好,这个代码呢,我就直接给同学们放到笔记里面去,就是我刚才写的代码。哎,写的这个代码。啊,把代码给大家放进去,然后针对这个代码呢,我们做了一些说明啊,做了一些说明,做了哪些说明呢?就是后面这些的基这个对样例类的一个说明,就在这写的。
13:06
基本介绍啊,样例类的基本介绍和对代码的说明,代码说明。好,基本介绍吧,就写个基本介绍。好,那么我写一个标题三,好标题三那分别再简单看一下,样例类仍然是一个类,那就是大的前提,那样例类呢,是用关键字case来说的,样例类是为模式匹配优化而设计的类,将来这个地方还要继续用它这个特色就是后面我们马上会写写一个案例,你明显感觉到它的一个强大之处,还有一点呢,它的每一个参数。会是VR类型的,这点大家要有个印象啊,啊,但是这有些同学老师我把它生成VR可不可以也可以,但是一般不建议这么做,什么意思呢?就是有些人他这样写的。VR这样子呢,它生成这个VALUE6就是读写的了,但一般来讲我们很少这么去做啊,一般来传统的都是只读的,这点大家注意一下,好,这是第一个,在样例类中还有一个。
14:04
哦,他会提供这个方法。好,它会提供一个apply的方法,还会提供一个UN apply方法,就是对象提取器。啊,对于对象提取呢,在模式匹配中有用,它会自动生成一系列的方法,我们反编译已经看到这些方法了,好,除上数之外呢,还有个特点,你该怎么写,比如说你说我样例类想写方法写字段该怎么写,怎么写好同学们关于样例的基本介绍就给同学们讲到这里。
我来说两句