00:00
成这呢是咱们这个今天考察的这五道问题啊,嗯,咱们前一天呢,主要讲的就是枚举类注解,呃,同时的话,这集合呢,咱们讲了其中一点类内容了啊,开始开这个头了,今天呢,咱们主体的就都是在讲这个集合内容啊行,那咱们开始这几道问题,那关于媒举类和注解其实有好多呢,咱们讲的点呢,其实也不少了,呃,当然很多点呢,其实咱们就直接就过了啊,就是这块呢,也没有去考察大家了,呃,就是相应的这个代码呢,大家适当的写一写,就没有特别严格的说,非得是重要的背过或怎么样的啊,那这儿呢,我们首先看一下这个枚举类,呃,这个枚举类的话呢,这我们是给它起了一个专有名词了,说某一种类呢,我们就叫做枚举类,对,所以提到了枚举类呢,大家得先知道是什么意思,呃,这个呢是其实也不算是一个严格的定义了啊,就是大家呢,一说到枚举类,你得知道它的这个这个想表达的是什么事儿,那就可以了啊,就像说这个内部类一样,是吧,内部类啊,抽象类啊是吧,这个一说这个概念你能知道它是什么意思啊。
01:00
那这个怎么说呀。嗯,就是这个类中的这个对象的这个个数是吧,确定对个数呢,是个数,嗯,是这个确定的啊,然后有限个对就是,呃,其实呢,主要大家呢,你脑子里边能浮现一些例子就可以了,像咱们定一个比如说员工的这个状态类啊,有这个休假状态啊,这个还有free状态,空闲状态,还有忙碌状态,还有这个离职状态啊,包括这个星期涉及到呢,七个对象啊,这个星期一一直到星期天,那还有呢,我们涉及到这个,比如说支付的状态是未支付呢,未付款呢,还是呢,已经付款了没有发货呢,还是已经都完全结束了,诶这样一些状态啊,呃,这呢就是说明类中的对象呢,个数有限的,不能再去造对象了,里边呢,已经给我们把这个对象呢都提供好了,嗯,那这里边咱们提到一个特殊情况,就是如果呢,你这个类中的对象呢,就只有一个。
02:02
对,它其实就相当于是个单例模式的实现了啊,这时候这个枚举类呢,其实就是一种单例的实现啊,那后边呢,提到说枚举类的对象声明的修饰符都有哪些?呃,有的同学呢,这个写的不是这个对象的这个修饰符了,写成这个对象可能我们也给它提供这个属性,比如像季节春夏秋冬四个对象,然后呢,四个对象呢,咱们有季节的名字,季节的描述,诶同学写成那个的修饰符了啊,那个修饰符的话,咱们说是这个叫private final是吧?啊,咱们现在写的不是让你写他们啊,就是写这个就不对了啊,应该是什么呀?诶public static哎,Final的写这个是对的,嗯,就是上边这个呢,这这这这是错的啊,下边这个呢是对的,行,这个呢,注意一下,就是我们呢,这时候呢,就不再通过方法呢去调这个对象了,调这。
03:02
这个其实这也算它也算一个属性了啊,就只要呢,你写在这个类当中,这个类里边我们说这个变量,这就叫属性了,然后下边就是方法啊其他一些结构了,那其实这个对象呢,咱们也相当于是一个属性,只不过这个属性跟这个属性有点区别,这呢是我们这个类里边几个对象啊,这个呢是每个对象呢具有的这个诶叫实例变量,其实不是实例变量就属性了啊呃,因为它是个final的,是敞量了,那么我们直接呢通过这个类呢去调,所以public的呃,Static的权限也得够,这个呢,加载的时间呢也得早一些,同时呢,也不能再修改了啊,这个要注意一下啊呃,这个你看错了话呢,你得记一下是这个,下一个说呢,什么是圆柱解,这个什么是圆注解,对对现有注解进行注解的注解是吧?啊或者你里边那个注解呢,别别叫注解,就是对这个现有的这个注解啊,进行这个解释说。
04:02
名的啊注解,那这呢就叫做圆柱解,就好比是呢,你这个呃,比如说这个厨师一样啊这个厨师这个这个这个师傅是吧?是诶给大家呢去做饭呢,那厨师呢也得吃饭,那给这个厨师做饭的那个厨师就叫做原厨师是吧?啊然后呢,这个呃理发师给咱们剪头发啊,然后呢,理发师的头发也得有人剪啊,给这个理发师剪头发的那个理发师就叫圆理发师是吧?诶就这个意思啊圆注解啊,对现有的注解进行注解的进行解释说明的这个注解,嗯然后呢说retation和target,这呢是两个典型的圆注解,基本上呢,咱们在呃如果自定义一个注解的话呢,通常这两个呢都会加上,那这里边就提到这个rotation啊,它呢主要的作用是什么呀?对,指明它所呃修饰的这个注解的生命周期,这个生命周期呢,咱们提到过有三。
05:02
种状态,那第一种呢,叫做S是吧,第二个呢叫class,然后诶runtime,嗯,这个稍微回忆一下啊,这个source这个指的是什么意思啊,就是对编译的时候呢,就是他会参与编译不,那就看具体的这个情况了,是吧?呃,其实肯定都参与编译了,就是编译的时候呢,它会该编译的时候呢,它起什么作用,它会这个这个显示的啊呃,会去执行的,如果这时候别译也不操作的话,那那就白洗了成了是吧?啊你像我们写的那个,呃,比如说overwe啊,Over read啊,Over read啊这个overwe的话呢,就在编译的时候呢,它会校验一下你下边这方法是不是覆盖这个想重写这个复类的,或者是这个实现的这个接口当中的啊,它会校验一下,包括呢,这个surprisewing也是它会去执行,但是编译器执行完以后呢,不会给它保留在自解码文件。
06:02
当中,哎,不会保留在资金码文件中,而这个呢,是会保留在自解码文件当中。啊,就是你要是反编译的话呢,我们呢,看一下你生成的资金码文件里边呢,你要是class的生命周期是能够看到这个注解的,相当于啊,OK,这呢是class,呃,S也说过了,这个class呢,是咱们说的一个默认行为是吧?诶默认的是他啊那runtime这块有什么可说的呢?对,就是编译时候呢,放到自接码文件里了,然后呢,通过Java虚拟去解释运行的时候呢,它呢,是不是还加载到内存里了,对,就相当于在内存当中,咱们呢说这个Java虚拟机解释运行以后,把我们这个类的一些结构呢,就加载到内存里了,比如说你当前这个类的这个一些这个这个所在的包啊,这个这个你的副类啊,你所实现的接口啊,你里边的这些属性方法呀,都会加载到内存当中,同时呢,如果你要是有生命,为runtime这个生命周期的注解也会加载到内存中,那既然你在内存中,后边呢,咱们会讲一个技术叫做反射。
07:09
啊,那么我们就可以通过反射技术呢,就是找到你在内存当中加载的这个注解啊,那你这注解到底是想干什么事儿呢?那我就可以拿到你这个注解,然后哎,去解释一下,看你到底想干什么,我就通过反射在帮你去做这个事儿,相当于就体现出来这个注解到底要做的事情了,是什么啊,就这样个意思成就是这个runtime,大家关注一下,后边咱们讲反射的时候呢,诶去说一下啊,怎么来获取这个注解。嗯,下一个说呢,你所理解的集合框架的这个都有哪些接口,存储数据的特点是什么啊这个话呢,咱们昨天呢,最后的时候呢,说到这个事情了啊这呢,我就不不不在这个里边呢,去一个一个去画了哈,其实就相当于让大家呢去写的是这个事儿。诶就这个啊,就是尽可能的你把这个collection collection这个写出来,然后这个写出来,这个写出来,这个写出来,具体的这个时现类呢,先不用写,咱们还没具体开始讲,大家呢也还没有记住,所以呢,先不用去写,然后后边这个事儿,这个事儿呢也不用写啊,啊就是如果说面试里边涉及到一些内容,咱们昨天复习的时候我也说过了,就是咱们上课讲的一些方便大家理解的一些内容呢,你这个呢,在面试的时候呢,你你不要说是吧,就相当于是你自己呢,明明是那样想的,但是你不要说出来,说出来就说破了是吧?啊就是你可以这样的去体会这样一个结构,但是呢,你不要给它弹出来啊,一弹出来显得好像这个显得有点low似的是吧,那就说点高大上的这个问题啊。
08:40
行,就是把这个呢几个点就说出来就OK了,就是相当于咱们这个集合呢,处理这个数据呢,特点就比较丰富啊,原来数组呢就比较单一一些啊,只能是有序的可重复的,嗯,在下边这个题的话呢,我看很多同学答的都打折了哈,就是写的不好是吧?呃,这个呢是咱们前面讲这个,呃,基础阶段的时候呢,涉及到这个异常处理,相当于年前讲的这个内容了啊,那么这两个关键字,这也是笔试的,呃,笔试当中经常还涉及到一个问题,包括咱们当时讲完课的时候,最后我还提了一下这两个关键字的区别啊,这个得需要会哈,因为开发当中咱们也确实去用。
09:22
嗯,就是你看我出这些题呢,尽可能的是想体现呢,就是咱们开发中用到的一些东西,就是像有一些概念,就是只是让大家去死记硬背一下,开发中呢也很少用,尽可能我出这题的时候呢,也就不想去出了,所以咱们昨天讲的那内容,其实呃,我要出这五道题呢,感觉有点难度,就是其实有有你要出吧,肯定能出很多东西是吧,那有些东西呢,没有必要大家非得去背过了,所以我这块呢,其实就出了这三个问题哈,然后剩下这两个呢,就是把咱们前边这个重要的一些知识呢,又稍微回顾了一下,包括这个第五道问题,大家之前咱们讲多线程的时候呢,理解又不好,所以把这个题目呢,又诶重新出了一遍啊,就是有些这个只是需要大家去背,那就不出了,没啥意思了,那这个开发中又常用的,面试当中又爱问的,那这些呢,就呃需要考察一下大家啊,所以每年这几道问题呢,比如一开始你答不好这个呢,只是一方面是吧,你看是因为什么原因造成的,是昨天这个时间比较赶了呀,没有及时的去复习复习呀,还是怎么样的啊。
10:23
那么主要的就是这几道题出完以后啊,一会儿呢,同桌给你判完了,你再拿过来以后,这时候呢,你看这个哪块有问题了,再要做一遍,怎么也得90分以上才行啊,啊当天你在做得90分以上,你把这个盲点你得给他扫扫清楚啊好,那么这两个关键字,其实我这边写的时候呢,应该说我这写的有点问题哈,我这是比较它俩的异同,呃,确实有同学呢,一上来就先写了个同是吧,那他俩这个相同点是什么呀?都可以抛一场,其实这个话也不太对是吧,嗯,就是这个,呃,这个肉也好,Rose也好,确实咱们讲课的时候呢,我就都都说抛了,但是他这个抛它还不是一个事儿哈,这个咱们相当于中文这个呃,语言就在这里,这个方面稍微有点苍白了,因为这个他这是带S的,那我这说的时候都说抛了,其实就把这好像混到一起了,实际上他俩呢,没什么相同点,对所以我其实我这题写的有点问题啊,或者我就故意写成这样的,这个同呢,其实没没什么相同点啊,你要非要说有点相同点,那就是这都是在讲异常的时候讲的,这俩是吧?啊没啥没什么关系啊啊就跟说你在这个饭店里边,然后这个厨师呢,就后边他是做饭的,然后呢,你是这个,呃,这个饭店里边吃饭的你是顾客,呃,你非说这个厨师跟那个顾客有什么关系,他俩本身就是做不同事儿的,非要说有什么关系,就是都在这个饭店中是吧?啊,你就说这个死。
11:58
跟roses他俩呢,都是在讲异常的时候讲的,呃,也也不能说这个roses它是处理异常的,这Rose其实不是是吧?嗯,所以这都算他们的不同点啊,其实没有什么相同点啊,那么主要来说一下他们的这个不同点,那throw。
12:15
像这个开发中咱们都用,所以说呢,这块你要说这个,呃,比如说面试里边涉及到这个问题了,你说我这个呃,记不清了,呃,但是我们开发中呢,我肯定会用,那就问开发中怎么用啊,记不清了是吧,那会不会用是吧?这有个问题啊,就是开发中咱们老师来用的这些内容呢,其实面试人家问到的话呢,一点都不过分啊,呃,这个呢,你开发中就是那样用的,你就直接说出来,其实这就是诶这个题目的一个答案了。肉这个怎么描述,对抛出一个啊对,你说抛出一个异常对象,这是对的。或者你把这个抛这个词呢,给咱们避开,它是不是可以叫生成一个异常对象,对吧,生成一异常对异常对象,然后并呢来抛出,其实一个意思啊,嗯呃,这呢就是它的一个算是解释,另外的话呢,就是这个死肉我们使用在哪呢?对是不是这个方法内部啊。
13:16
呃,方法内部这个呢,其实肉呢,对应着咱们另外一种情况,就是咱们很多时候呢,写代码的时候不会用到这个肉,是因为呢,咱们代码你写到一定层面的时候,你调这个方法,它自动的就抛了是吧。诶,这个还这么着一下吧,哎,所以它对应的另外一种情况呢,叫做自动抛出异常对象,它就是它跟另外一种情况呢,是对应的,咱们这个呢,就是手动的咱们去死肉一个异常对象。嗯,像咱们讲这个项目三的时候,说这个你想删除指定ID这个员工了,然后呢,人家就没有你这个ID,没有这个ID怎么办呢?我throw一个异常throw在方法内部throw个异常,说没有这个对象啊,没有这个指定ID的这个这个成员是吧?或者咱们去添加这个,呃,一个人到这个开发团队中的时候呢,提示说说只能加一个架构师,你现在要加更多的,诶不行,诶我们又在方法内部去死肉一个异常对象,像这些呢,都是咱们手动的让它抛出来的,那对应的这种自动的就是你代码一写点得标完以后,然后呢,一执行控制异常。
14:24
哎,这个呢是自动的,在这个代码内部呢,就帮我们去死揉出来了。哎,不用你管的啊,所以这是两种对应关系,那么这个肉和死肉它俩呢,其实像是一个递进关系。啊,递进关系,也就是说这个死Rose呢,它其实相当于是一种处理异常的方式,对吧?哎,处理异常的这个方式,呃,方式它呢是有别于。或者有be,或者我就直接跟上面这个对应的,也是这样写,它呢跟我们另外一个是这种对应关,那就是或者叫呃对比关系的是吧,对就是这个try catch finally啊就是它呢是来处理异常的啊这个处理异常呢,它是写在哪呢。
15:15
嗯,方法方法体方法声明处是吧,使用在方法声明处的这个末尾吧。就是在咱们那个方法最后都有一个大括号,哎,一个小括号,大括号在这个小在哪这个这吧,诶在这你去写这个叫roses啊,这个相当于是处理的一种方式了,它对应的另外一种处理方式呢,就是TRY开finally,诶我们写代码的时候呢,大家二选一,二选一就可以了啊,那么他俩呢,是这种前一个环节和后一个环节的关系,前一个环节呢,你要是没有这个异常对象,不管你是手动的也好,自动的也好,你要没有异常对象,因为这个代码就没有异常,没有异常呢,我就不用去处理,就不会用到这个Rose。
16:07
哎,他俩是递进关系,咱们这不是当时典型的说了一个例子,上课的时候呢,提到了一个叫你就体会这个事儿啊,上游排污对下游至五。上游相当于是不是就是它呀,污污就是我们所谓的这个异常,异常对象啊,你这块呢,专门是排污水的,哎,这个呢,下边是专门来治理这个污水的,那是两种不同的企业了啊,是这种递进关系的啊,哎,这个呢要注意一下这个,这个大家一定要清楚啊,这个咱们写代码肯定要用了啊,另外呢,人家问这个问题他俩长得比较像,所以问的也不过分,千万别说说这个异常比较少的时候,我们用肉啊,超过两个以上的话就用throws是吧,成负数了啊行,下一个说谈谈呢,你对同步代码块当中同步监视器和共享数据的理解和各自的要求,这个呢是咱们讲多线程中的一个难点。
17:08
这个咱们当时考大家的时候呢,呃,答的不是特别的好啊,所以这块呢,我就又出了一遍,这也是一个重点啊,那首先呢,提到这个叫同步监视器啊,这个咱们就快速再来复习一下,同步监视器呢,咱们叫俗称锁了,嗯,它的这个要求是什么呢?或涉及到哪些内容呢?两个点是吧,第一个呢,就是任何一个类的对象都可以充当啊,这个锁啊,就是在这个对象方面呢,没有任何的这个要求了,但是它有一个比较严格的点,嗯,对,就是多个线程必须要共用同一把锁,否则那就还是线程不安全的,那大家呢,就记住这两个事情就可以了啊,至于说呢,这个这个呃,很多时候呢,我们可以用这来当所啊,静态方法的话呢,又是这个当前类当所啊,这个呢,就是一些细节问题了啊,就不多说了,这呢主要是这两个事儿。
18:12
下一个呢,叫做共享数据。那首先明确一下什么是共享数据,多个线程共同这个操作的这个数据,哎它呢就叫做呃共享数据,那么共享数据咱们之所以关注它,就是因为呢,我们出现线上安全问题,就是呃操作共享数据的时候呢,一个没操作完,其他就来操作了,哎才出现这个安全问题啊,那么在这块呢,我们这个为了保证这个安全性,对它的要求是什么呢?就是我们需要这个使用,不管呢,你是同步方法还是同步代码块也好啊,需要使用这个叫同步机制,是不是将操作这个共享数据的这个代码呢,是不是得包起来,包起来这块这个要求呢,就是不能哎包多了,哎也不能这个包少了。
19:07
诶,就是这样的一个点。就可以了啊,那同时呢,当然最开始要做的事,你得先判断一下有没有共享数据啊,共享数据都没有,那是一个多线程问题,没有共享数据啊,也就不会有现场安全问题了,哎,就这样啊,哎,有现场安全问题,相当于你就是有这个共享数据了,行这呢就是咱们提的这个呃,几道问题哈,啊,这个大家看你看哪个答的不是特别好,不清晰啊,是一个盲点,还是说这个只是给忘了啊,这个呢,就得该这个复习,就稍微复习一下啊,有的呢,可能这个太靠前了,忘了这块我又提出来了,这块你再熟悉一下就可以了啊。
我来说两句