00:00
好,我们的这个项目二呢,就写完了啊,大家呢,刚才都练了,练了肯定呢还没有写完啊,这个是毫无疑问的了啊,这个对,就是你得晚上接着写,或者明天的时候再练啊,虽然说明天这个周末了,但是大家呢,现在最起码你应该这样去利用这个时间,比如说你把这个晚上呢,晚自习正常也不是强制要求了晚自习,包括明天这一天的话呢,大家把这个时间呢,你分成三段,上午一段,下午一段,晚上一段,加上今天晚上一段,一共是四段。啊,就是这四段的话呢,最起码你有两段是学习的,至于说哪两段,那就看你自己了,对吧,你看今天晚上呢,有约会的啊,可能还不止一个的这种是吧,你控制好这个,保重身体是吧,就是你自己来协调,就是你这四块里边,你哪两块是至少两块时间高效的学,别想别的,哎,剩下这两块呢,你该放松的就放松放松也可以啊,就是呢,把这个项目呢,大家还是需要写一写的,但是没有强制要求大家说说我必须得这个周一,周一上课之前把这个项目就非得是写两遍写三遍,没有这个要求,就是呢,你比如说周一的时候呢,没写完,没写完的话呢,周二周一晚上接着写啊,周一晚上没写完呢,周二晚上再接着写,就是呢,你可以分配到几天时间呢去写,因为这里边呢,没有咱们新的知识点了,就是对咱们已有的知识呢进行一个整合,这个业务逻辑呢稍微复杂一些,所以写起来呢,也确实是慢一些啊,但是大家呢,还是有必要把这个项目呢好好写一写的。
01:29
当你自己能够独立完成的时候呢,你回过去咱们也说过好几次了,你回过去再看咱们之前写的某一个单独的是练face的啊,这个练这个封装性的,你会觉得其实非常简单,就是一些小的测试而已,对,是这样子的啊,这呢就相当于大家呢,这个高考的时候,高三做的这个综合题目一样,你把这个综合题目呢,你做的熟悉以后,你再看之前的那些呢,就是比较简单的,这就说明你的这个认知能力呢就提高了啊,那后续的话呢,咱们还有这个项目三,比这个二的话呢,还是要难一些的啊,但是这呢,整个也只是我们Java基础阶段的啊,然后在这个外部阶段的时候呢,我们就又涉及到啊,你有这个前端的这一些HML啊,GS这样的技术,然后我们再跟这个他派服务器搭建里边的这个组件呢进行交互啊,组件呢又跟我们数据库进行交互,这个呢逻辑呢就越来越复杂了啊,讲到框架的时候呢,我们就开始,诶这个把这个后台这个逻辑呢,使用框架的方式去搭建做一些配置啊这东西呢就。
02:29
一点点越来越多啊,那在这个过程当中呢,你这个认知能力呢,其实是不断的提升的,那这个过程当中呢,你的这个呃,编码能力其实也在提高啊,只要有一个点就是你别停,你别中间呢,就是学了一个月,突然开始反思了,说我要不要接着做这个事儿是吧?啊那你肯定就提高不了了啊这个其实呢,大家都已经走到这儿了,这个面向对象呢,已经讲了,基本上就算一半了这个内容了啊,诶只要这个迈向对象呢,整个这个思想诶能够领悟到以后,剩下的话呢,其实就是你不断的去练习,去写,去熟悉啊,其实这个过程打通你的这个认同耳脉,属于是吧啊这样的一个过程啊,行,都是这么着过来的啊,你也别想说有什么这个投机取巧的这个快速的这个方式啊,晚上不会,然后第二天一醒呢,突然就会了,嗯,这个做梦的时候,然后练了这个很多这个招式是吧?啊或者说这个老师你能不能这个过来跟那个武侠里边你推我两下是吧,把这个武功。
03:29
传给你啊,我顶多传给一个人是吧,传完以后呢,我就忘了是吧,或者说我就挂了啊,嗯嗯,这个你只就得是自己一点点这样吭哧吭哧去写,都是这么着来的,没有什么好招啊,你看我现在写的挺熟,那一开始我我不会的时候呢,那我也是吭哧吭哧这样写的,对吧?啊所以说没有什么好招,就是你写多了以后呢,这个就会了,就熟了,都是这么着来的啊行,那这块的话呢,我们稍微呢,呃,为了让大家更好的去理解啊,稍微的总结一下,这个项目里边呢,咱们核心其实就写了这样的三个类啊,就是刚开始大家写的时候呢,可能还不太适应,尤其是这个类比较多的时候,一个里边又掉另外一个啊,一个里边又嵌套另一个啊,不太熟悉,但是呢,总归有一天你要见到的啊,就跟说呢,小时候你不能告诉这个,也不能老是告诉孩子说世界是美好的,没有坏人,都是好人,他总归一天呢,要走出社会,那你不能这个始终憋着他,然后呢,有一天18岁的时候呢,走。
04:30
去的时候发现,哇,原来世界如此险恶是吧?啊前面的时候呢,就给让他知道啊,有好人就有坏人啊,这个有天气好的时候呢,就有天气坏的时候啊,得让他慢慢去接触这样的情况啊,这个也是一样,那咱们实际开发当中,那也不会说把这个所有代码都会写到一个类当中,你总有一天呢,需要接触到不同的类,咱们这呢,还算很温柔的,就仨啊,那你整整这几十个上百个,几百个的时候呢,那你就更招架不住了是吧?哎,得一点点上啊,咱们这三个类里边呢,它确实呢各自有各自的功能,哎,我们再把这个项目再变薄一点啊,我们这里边呢,就是做一个增删改大的操作,大家看到了就是这样的一个界面上效果,然后呢,诶,我们在内存层面对这个customer呢,这个对象进行增删改查了啊,只是内存层面的,我们再重新运行呢,就没有了,还涉及不到呢,跟数据库进行进行交互了。
05:25
啊,那么在内存层面那个三然改查,其实呢,本质上来讲就是有个数组啊,这个数组呢,我们这里边儿往当中去添加数据,修改删除查询,把这样的一个对数组的生产改查操作,咱们呢封装在customer list当中。啊,回头呢,如果你关于数组这块还有其他一些丰富的结构想去操作的话呢,也都是去我们customer list当中你去丰富啊,别写到别的这个类当中,那么我们最基本的呢,说这是一个customer的一个数组了,最基本的就是customer这个类的一个对象了,哎,这个类的话呢,咱们其实相当于是一个渣in,那专门呢,我们把这个姓名啊,姓别,年龄,电话、邮箱这样的数据呢,封装在一个类当中啊,每一个对象,每一个客户都是以一个customer对象的方式去呈现,这也是我们所讲的叫面向对象客户的信息呢,可能很多啊,有姓名啊,性别啊,实际问题当中甚至还可以更丰富,那么这些呢,我们都作为一个对象的所有的属性出现,那我们就把它造成一个类叫做customer类,这是比较基本的一个类啊,那么我们数组当中存放的都是这个类的对象啊,数组的增改查都放在这里边啊,那这数组增生改查其实。
06:43
这个两个类写完以后,我们其实呢就可以写一个main方法了,这个main方法里边呢,你就造customer list的这个类的对象,你去呢调这个数组相关的增产改查方法就可以做了,只不过呢,我们这时候调呢,你要是展现出来的话呢,这个可能就比较low了,也不会有这样的界面了,我们希望呢跟用户呢有一个比较良好的一个交互,那这呢,我们就涉及到这个界面的一个情况,那界面的话呢,我们这就生成了另外一个类叫customer view。
07:11
诶,这个呢,就专门用来跟这个用户呢去交互的,显示这个菜单,包括用户的处理操作都是在这个customer view当中来实现的。说白了呢,就是我们在这个customer view当中给用户呢呈现一个菜单啊,让用户呢去选12345从这里边去挑啊当用户呢选择的是一个叫添加的时候,那我们就想办法呢,获取用户你想添加的这个数据,咱们呢就把这个数据添加到customer view当中,诶你想做一个这个删除操作,选了一个三删除的话呢,呃,你你再告诉我一个你的想删除的那个ID是多少。或者这个number是多少,我们接着呢还是调用我们customer list当中那个删除,所以这块呢,Customer view就是用来跟用户交互的啊,显示和界面,包括获取交互的这些数据,它就是干这个事的啊,这里边儿呢,核心掉的还是我们的customer list。
08:04
啊没了,其实就这么三个事儿,大家呢各司其职,各自完成各自的事情啊,那大家呢,就这个按照这个顺序啊,你先得有它,然后呢造个数组,对于数组呢,进行增删改查的操作,然后呢,在这里边我们跟用户去交互,同时呢,诶去调这个customer list,去实现增删改查,哎就是这样的一个过程啊,那么这块呢,我们要华山林图他呢就暂时不用多考虑了,就是获取用户的数据,调的呢都是这里边的方法。啊,那咱们这块呢,如果要是稍微画一下这个内存图,只能是这个概率的给大家去画画啊,因为里边调各种方法行三你要都画出来,这个结构就很复杂了,只是我们画一个简图。这是咱们这个项目简图。行,这里边呢,我们抽取出来几行这个代码,就是我这呢去创建一个叫customer list,诶我这呢不妨去叫个list了,哎,New一个哎customer list,这个customer list的话呢,我们造的时候呢,它是一个带餐的构造器,哎,这是一个代餐的构造器,那这呢,我也不妨呢指定一下这个我就不整这么长了,我来个六啊行这样话呢,我们就造好这样的一个对象啊假设呢,我们这呢,就放在一个main方法当中的,这就相当于一个局部变量了,然后接下来的话呢,咱们会通过这样的几个操作哈,类似咱们有个叫艾customer的方法,在这里边的话呢,我们去new一下,我不妨呢就写这个匿名了啊这呢,比如说叫这个Tom,这个稍微可能有点长啊,23岁呃,然后呢,是一个男性。
09:53
这是个叉,然后呢,我我就简单来写吧,就这样的三个信息啊,呃,还有这个电话呀,邮箱呀,这个我就省略掉了,这呢是我们添加的其中的一个元素,你可以呢,再去添加一个CTRLC。
10:10
对,这块呢,少一个括号,再来一个,比如Tom和Jerry。这个呢21岁啊行,那我们呢,就先来看一下这几行代码的一个执行过程。先看这个事行,那我们的话呢,来画一个站,一个堆,这是站结构,那堆结构把这个我们把它包进去吧,好,这个没方法一进来呢,我们假设呢,就执行的这个语句,那首先呢占空间声明一个list。List以后在对空间我们去new了一个customer list。
11:00
哎,我们造了这样的一个对象啊,这个不太清楚。行,这个够清楚了,嗯,这呢就是我们造的这个customer list这样一个对象,这呢会有个地址值,这个地址任务就省略掉了啊,这个大家都已经知道了,哎,我们通过这个地址值付给我们占空间的list,我就指向了对空间customer list,这是new的它啊。CTRLC一下,哎,这是牛的它然后呢,我们这个customer list的话呢,它是有属性的,它有两个属性,一个呢叫customer的一个数组是一个customers变量,另外一个呢叫total啊有两个啊,然后total的话呢,是一个int型的,那就意味着呢,我们这空间里边这个total呢,就直接把这个值就写上了,诶这个我把它写上边啊,它是一个int型的,这个我们对于基本数据类型呢,存的就是它本身的数据数据啊,它是零,然后还有一个呢叫customers。
12:02
还有这样的变量啊,这个我们画的稍微这个这样一下啊comos呢,这是一个数组,数组呢就属于引用类型啊,引用类型的话呢,我们说就放两种值,不是no就是地质值。对啊,那这个默认值呢,它是个now,默认值个now,但是我们在这个构造器当中呢,给它做了一个初始化啊,拗了一个数组啊,拗完数组以后呢,把这个数组的地址就付给了我们这个,哎属性了,所以呢,我们这儿呢,给的长度是六啊,这个行参这块我就给省略掉了,本质上来讲就是你赋完值以后呢,在堆空间当中,我们会有一个长度为六的一个数组。好,那这呢,我把这个数组呢,就生命到这儿啊,那这个数组的话呢,一定会有一个地址值,毫无疑问的,那这个地址值的话呢,其实就赋给了我们这个cosmos。
13:05
哎,这个我举个例子啊,0X7788,哎,这个呢,地址就是7788。好,那我们这个呢,指针呢,就指过来了,行,那我们在这个customer list当中呢,实际上只维护了一下customers这样的一个引用地址啊,这个对上本身哈,这个我们是在额外的空间又给它开辟的,这个大家注意啊,为啥是这样的呢?你想想我们呢,一开始先拗了一个custom list,它这个空间你要突然给他整了一个100,或者回头呢,你改了一个数组,又改成超长的了,我们这个空间呢,你要这个数组,如果你要认为它是在这里边。那假设一开始你定的是六,我这能盛得下,一会儿你要回头六乘不下了,你改成60了,我我这里边可能是不是还乘不下呢。所以说这它本质上这个速度本身不是在这里边儿的。
14:02
数组的话呢,是额外有开辟的,只是在这儿呢存了一个地址而已,这个大家注意啊,没有说把这个数组也报到这个黄色的这里边儿了,这没有,那么我们造完这个数组以后,数组的类型呢,是customer类型的,那又是个引用类型,引用类型呢,我们这呢叫动态初始化。没有负值,所以这个时候呢。都闹吧。行,那么基本上的话呢,我们可以说这一步完成以后呢,目前目前在内存中我们能看到的就是这样的一个情况。就这样一个情况,那么接下来呢,我们通过list呢,去调一个叫爱的customer一个方法,然后这呢相当于是一个十参了啊,把这个13呢,你先付给我们爱的customer这个刑参,呃,刑参呢,又得在占空间中去开辟,这个过程我就给省略掉了啊,就不去说这个事了,最终目的呢,就是你把你造的这个对象,这个对象呢,你既然是拗出来了,那也得在对空间中去拗一个。
15:13
我先呢就写到这了,这是的,这个对象用一个这个颜色来表示吧,这是咱们这个的。CTRLC。哎,就是这样的一个情况啊,这我new的这个对象了,然后new的这个对象的话呢,其实你是把它的地址把你把它的地址呢,实际上是相当于付给这个行参了,诶这个行参呢,在这块呢,他把这个行参的地址是不是又付给你这个数组指定某个位置上的这个变量了,对,因为你这个数组的类型也是卡类型的啊,那么把它呢又给了它了,其实就相当于是我们这个位置呢,就有了你刚才用的那个对象的地址了,这个呢,一开始to是零,所以我们就先呢,相当于你先添加的,就是拿出他来说的,诶,那就相当于是把你这块的这个地址呢,就付给了他了。
16:11
这是通过艾特customer来做到的,哎,最终的效果呢,就是这个闹呢就不存在了,哎然后呢,我们这有个地址值,这个地址我就省略了啊,就把这个地址呢给了他,他呢就只过来了,诶然后呢,你又的这个customer呢,这是三个相当于又是食参的,你这三个食参呢,你是付给了具体的你这里边的这几个属性了,我这写的多,呃,刚才这个举例值写的稍微少一点了啊,那就相当于我们在堆空间当中,你有你自己这个对象的属性啊,这呢是name叫Tom。Age呢,23,然后真的。这个是个难看假设呢,我们这就这三个属性。行,那这样的话呢,我们这个添加啊,这样就指过来就有数据了啊还没完事,我们这时候呢,艾特customer呢,诶你这块呢,给它做了一个添加之后呢,我们这个拖动呢,还加加了一下。
17:11
所以此时呢,我们这个to呢,这块,哎,从这个零呢,就变成一了。所以呢,就是这个total呢,就是来记录你到底艾特过几次,艾特过几次呢,它就是几,进而的话呢,我们就相当于是添加过几个元素,就是用total来记录的。那么这行代码执行完以后,就是这个添加的第一行啊,这就算内存中就长这个样子了,再接着我们再去做一个艾,再做艾的话跟上一个,其实类似的,你又拗了一个,我这呢就重新再给你去扭一个。理想了。哎,我那再去扭一个,然后这块呢,我们这个,我把这个复制一下。Con。
18:10
这个我这一下,这这个21啊男。好,这呢是我们这个造的第二个对象啊,然后我们通过这个艾特方法操作的时候呢,里边这不就是写的是这个数组,然后偷偷加加了,就是先是用一下你这个一,然后再加加,哎,用一的时候呢,相当于掉的就是这个元素了。哎把它呢,哎改掉,然后我们这个指针呢,就把你这个地址附给我,我呢就指向你了,哎所以这样的话呢,我们就有这样的一个对象了,同时呢,你这个偷偷呢,还加加了一下。这个呢,就变成二了。行就变成二了,呃这呢,我们就相当于是执行成这样的一个效果,呃这两个位置呢,就都有元素了,那后续的话呢,咱们比如说呃,你再去添加等等啊,就是接着往后走就OK了啊,那这呢是咱们演示的叫list叫添加了,那我们呢,还可以去做修改删除便利啊,比如说修改,修改呢,咱们是在这个customer view这个view当中呢去做的修改,但是这时候修改本质上来讲呢,你是也在这个修改中。
19:29
这不咱们写的叫修改嘛,你在这个修改中,其实核心的来讲还是掉了我们customer list里的这个方法而已,所以核心的逻辑的完成还是依赖于它这个view呢,只是做了一个界面的一个展示,让他呢更人性化一点啊,显示一下这样的一些信息啊,其实本质上来讲呢,都还是做的这个,诶custom list replace这个replace里边呢,这块呢,就重新给他附了一个。啊,重新附了一个,咱们这儿呢,在view这块选择的是重新给new了一个对象的方式啊,那就意味着呢,就是如果说我们比如说这个位置,我们呢,想给大家改一下21啊,这个也可以做成一个思考题,大家现在可以考虑考虑啊,就是我们现在做的是这样子的啊,我想把这个这个index是一的这样个元素呢改了,比如说这个Jerry Jerry呢,他不是个男的,是个女的,哎,我们现在的做法呢,选择的是重新new了一个。
20:26
这个稍微有点紧张了啊,这个稍微再大一点。我们呢,是重新拗了一个这个对象。诶我呢是重新拗了个对象,然后呢,把这个里边这个信息拿过来,然后呢,诶Jerry比如说是个女的,我这就直接写了个女,咱们呢是这样子做的,同时的话呢,把这个地址针的话呢,你给它改掉,就是改成我们呃这个位置的原来的这个呢,比如就不要了。
21:03
哎,打了个叉,哎打个叉这个呢,说的是下边有如果有这个replace的话啊,这个我把这个呢也光是简单的写一个,诶replace我customer啊,这个写的是个一,然后new一个,哎,New了一个customer,这个我就省略这个参数了啊诶这里边就写这个点点点吧。哎,就是下边这个情况,哎,我们把这个删掉的,换的是它,咱们是这样子做的,实际上的话呢,你也可以不用去新造一个,因为你这个新造的话呢,这个呢,其实就回头被拉,就是这个GM呢,就给回收掉了啊,其实你也可以呢,在原有的这个基础之上呢,做一个修改。是可以这样做的,那大家呢,作为一个思考题,你下来想一想,我们呢,还想用原来那个对象。怎么办?其实呢,也不复杂,原来这个对象的这个cost cost,然后这里边实例化了,这就是这个对象是吧,我们还想用它,那就是你别让它变地址。
22:09
他也用这个地址,就是还让这块呢,是用这个地址,那你只需要是不是把它这个变量属性重新set一下就可以了,哎,所以呢,你就过来以后,诶比如这里边有一些呢,可能是用户改过,有些没改过,但是你管他改过没改过,我都给你S一遍,你这块呢,就用不着这块,我就给那给你重新拗了,你直接呢,就拿着你上边那个cast。你是不是直接就set一下,然后把这个name还用上面的NAME1串给他都set一下,是不是也可以set完以后呢,你在那都replace,其实不用replace了,就。因为你这个地址没有变,它自动的就相当于给改了,对吧?诶也是OK的啊,所以说呢,这个问题呃,你想清楚这个过程以后的话呢,其实是可以变来回变呢,你都都清楚啊,就说明里边的原理是OK的啊,咱们这呢,选的是这样一种方式,这是完全的一个替换啊,真正叫replace了,删除的话呢,咱们提到了,哎,你要是比如说就有俩元素,你把第一个删了,你就把这个第二个呢给它调过来,第二个调过来呢,其实就意味着把第二个的地址呢放到这儿了。
23:19
对,我把这个呃删除这个事儿呢,也简单说一下,这个我就不再画了,这一话就还挺复杂的啊,换个颜色,这个删除的话呢,我们想把第一个删掉,实际上呢,是把第二个这个位置的地址呢,覆盖到第一个位置了,那就意味这个第一个呢,嗯,咱们比如说在这个修改的基础之上吧,哎,覆盖了以后呢,我们第一个呢就也指向它了,那你此时第二个是不是还指向它了。你覆盖过来以后呢,你这个第二个地址没有消失啊,它还有的,所以说呢,我们需要做的是一方面呢,你覆盖过来第一个指向它,第二页指向它先呢,把第二个改成no,把它呢干掉不要了,让你跟后边都一样全是no,同时的话呢,你这个位置呢,就二变成一。
24:03
哎,那这个时候呢,你再去便利,我只有第一个位置有地址,只让它取到第一个这个元素后边呢,全是no也不让他取。哎,就这个过程,嗯,那查询的话呢,就是刚才这个说的便利,这核心的话不就是list里边的增长改查嘛,就是刚才这样的一个图径,所以大家呢,脑子里边浮现到的复杂,无外乎就是这里边有一个customer list啊,List里有个数组,数字里边有个对象,乃至一说的话呢,这个customer回头你可以自己再给他造一造customer,咱们昨天也讲过,客户里边还有账户呢,你是不是还可以让这个人有一些账户啊,就是这个属性呢,我们目前都是一些字符串啊等等相关的,你也可以让这个客户呢,他还有个账户。啊,这个账户的话呢,又是我们昨天定义过的这个count,诶这里边有个账户,账户呢又是个营类型的,又指向一个,它这个结构呢就更复杂了,诶可以试着呢下来就变一变,改一改啊就是通过这个练习的话呢,去熟悉这个里边这个内部结构啊就行,好这呢就是咱们关于这个项目的一个简图啊就到这儿。
25:07
嗯。
我来说两句