00:00
这个五道问题啊,嗯,第一道,第一道呢,还是关于咱们说的这个多态的问题,说如何呢,实现向下转型,这里边有涉及到这个代码的问题,咱们整个呢,把它CTRLC还是粘到T里边看啊。对,13CTRLV好转过来。实现向下转型,这个向下转型呢,对应的另外一个过程呢,叫向上转型,向上转型呢,一般咱们就很少说这个词了,一般就说成是多肽了,对向转型呢就是多肽,那么向下转型呢,就是多肽的一个逆过程,多肽呢是说我们将一个此类对象呢,可以赋给一个父类的引用,那反过来就是我现在呢声明的是一个父类的引用,现在呢,我想把它强转成一个子类啊,首先说为什么要强转,你为什么要向下转型啊,对,你想用这个,你强转以后呢,肯定是一个子类了,因为此类呢,我们说比父类这个功能呢要更强大一些,我目的呢就是要为要用这个子类中特有的这些方法或者是属性,对吧,就像咱们下边讲这个E的方法一样,这个应用方法呢,我们进行重写的时候呢,因为你重写的,所以你就得先满足人家object当中这样定义的一个声明,声明的时候呢,叫public布尔的。
01:24
型的,然后呢,我叫ES,这个行参是object类型的,这是个OB接了,然后呢,我们在这个方法里边进行判断的时候呢,哎,我们必须呢,把这个OBBG呢,得给它转成一个userc类型,否则的话呢,你这个对象我就根本看不到你的内幕和A值属性,进而的话呢,也没办法去比较这个调这个方法的那个对象和这个形态对象到底是不是一样的,所以呢,我们现下转移的目的呢,就是为了调用你此类所特有的这个属性或方法是这样,那如何实现向下转型呢?
02:00
就是使用这个强转服吧,对这个强转服呢,咱们并不陌生了,前面讲这个基本数据类型的时候呢,我们说强制类型转换用的呢,也是它。也是它没有问题,那这里呢,其实再多说一句,就是本身的话呢,比如我这个P,我new了一个慢,咱们上课讲的,那你在这个new man前边呢,你说我这呢,给大家加上一个person,从语法上这个OK不。可以吧,可以对你想一下也可以,就是它就相当于是强制的告诉这个编译器,我现在要把它转成这个类型,只不过呢,像这种呢,是不是就不用写了,对自动的就直接往上就转了,就相当于直接就多肽了,那尤其呢是你这是一个负类,这边是一个负类的引用,然后左边呢,是一个子类的时候呢,你要小心一点啊,这时候呢,我们是一定要加上这个强转符的,那我们在使用这个强转符的时候,需要注意的问题是什么呀?对我们强转嘛,强转的时候呢,那就有可能转不成,转成的时候呢,那才是正确,转不成就错了,转不成的时候出的这个错误信息叫class cast exception,这个咱们讲完面向图像以后呢,紧接着就讲这个异常处理,把这个我们到目前为止见到的这异常呢,总结一下,以及呢,看一下该如何在开发当中去处理这些异常。
03:19
这个情况这呢,我们先零零散散的也看到一些异常了,大家呢,心里边有数,稍微总结一下也可以,等到异常的时候,异常处理的时候,我们再系统的去说说呢,要想进行强转或者叫向下转型,就有可能会出现class cast exception这样的一个异常,那出现异常肯定是不好的,因为一旦出现异常以后,前面咱们也提过,腾讯呢就终止执行了。这个你写了这个100行代码,想让它的它这个都执行完,才能够完成你这个功能,结果呢,在第五行就出现异常了,一旦出现异常后边程序呢,就不执行了,显然呢不行,那我们必须呢把这个异常呢给解决掉,那么该怎么去解决这个问题呢?
04:02
该怎么解决啊,对,那就是使用叫instance of进行一个判断,在进行强转前,或者叫向下转型前,判断判断一下这个这是一个引用了,这个引用,呃,这个咱们这里边儿,这刚才说的这个事,这相当于还没有用这个。这个这个强转符了啊,我现在想给它转成是一个慢啊这块的时候呢,我们体现的这是一个这个强转。这就是我们这呢,是一个强转,你要是转成了,那就是对的,你要转不成呢,暴力异常,那说明它就不能转,所以说呢,你在这个转之前呢,先判断一下能不能转,就这个意思,那instance of呢,就是做这样的一个判断了,这个instance of呢,一会咱们复习的时候再说一下这个关键字,大家要会用这个关键字左边呢,放的其实是一个变量名,比如说我们这里边这个嗯,M也好,或者是P也好,你这是个变量名,然后呢叫instance of,这边写的是一个类型,对,这个得整明白了,这两个地位不一样,这是一个变量名,这是一个类型,不是说有同学误以为说这是个类型,这又是个类型,那那错了,这是个变量名,或者要是个对象,这边是一个类,这意思,你是这个类型的,我呢再进行一个强转,这样的话呢,我们就能够很好的去避免会出现class class exception这样的问题。
05:30
行,这是就我们说的这个事情,这个要求大家呢都得会,虽然说咱们开发当中用多肽呢,那绝对是占大多数情况了,就相较于这个向上向下这两个,从他俩这个角度来说啊,那相上转型就是多肽我们用到的情况呢,达到百分之九十九十五,相下转型呢,其实用的相对来讲少一些,但是也会有,你就比如说咱们下边提到这个EQ的方法,这就算是一个你必须要给它往下转了,呃,但是用的还是少一些哈,多肽呢是大量的被使用。好,这个呢,就先过了,下边一个说等等和ES有什么区别,这个题目大家都得会。
06:08
这都得会,因为呢,这是一个非常高频的一个问题,而且呢,这道问题呢,也确实也容易出错,就是我PPT里边写过的很多这个开发者的话呢,答这个问题的时候都答的不对,是因为总会总会误认为这个ES跟那个等等呢,好像就绝对不一样,那实际上的话呢,他那得看你这个有没有重写了。那这个问题的话呢,找个同学来说一下。孙杨,说说吧。嗯。嗯,这个水的话它比较好的,要是数据了基数移动的一个据比较。在做那个基本类型比较。对,地址。比较对,就是对于我们后面常用的剧之类的一些。
07:10
等他那后面几个老师他们那个。嗯。还有还有一点就是我们要是自定义的类的话呢,需要用到E的时候。也要进行重写,那重写以后呢,你的基本规则是原则是什么呀?你你想怎么去重写它呀,就是说一说就可以,就是比如说我下边有个user了,我现在需要咱们去重写E扣四,那你重写你要怎么想要怎么去写呀,首先呃,首先首先跟实验的一样。啊,那是细节了,细节就是你的大方向奔着去是要干什么呀?对,就是他们这个内容呢,是不是都是相等的是吧,那这就可以了啊行,请坐啊,这个答的是比较完整的了,而且也相对来讲比较流畅一些,就大家呢,你去这个笔试面试的时候,你答题的问题,笔试呢还好你可以去想一想,然后呢,记不清了啊,想一想,想清楚了再去写,因为他看不出来说你这个中间有思考的过程,但你要是面试的时候要问到你这道题的话呢,就是你肯定不能说跟那个背的一样,有的同学呢,就是到最后这个找工作的时候呢,就是背了好多题,然后呢,你要说吧,他也能够说的出来,但是呢,就是明显感觉是在背啊,因为你一个人的话呢,正常咱俩面试就是你首先呢,最起码面试通常情况下都会一个半小时以上了,不会说呢,一过去十分钟,觉得要不要这不会的十分钟你要出来了,那基本上你就放弃得了,对,肯定是没戏啊,那通常情况下呢,就是得一个多小时以上,有的两个多小时,甚至更长时间,那面试工程当中。
08:52
相对来讲就会来一次,那就聊透了,能行不能行,这基本上就能定下来,属于这种,那你在这个面的过程当中,一个多小时,肯定你们还是要有这种眼神的交流的,你不能是这个一个多小时从来没有看过人家,连人家穿什么衣服都不知道,男女的话呢,大概知道是吧,啊这肯定是不行的,就肯定是有这种眼神的交流的,你得看人家,你不至于说老师盯着人家吧,但是呢,时不时的你给人家有个眼神的交流,是这样子的,然后的话呢,就是你这个交流呢,这就正常,你看他就可以了啊,但你要说答这个问题的时候呢,你演示老是往上看,那肯定是你在想,那就认为你这个东西呢,其实你是有点背的嫌疑了。
09:32
对吧,你要是老是往下看,或者左右老是这样去晃呢,就是在编的嫌疑了,因为人家说谎的时候呢,就是不爱盯着对方看,然后这个眼神就来回飘是吧?啊,这有点编,所以这种呢都要规避,你想想这个面试你的人,这都是老手啊,其实呢,一个人过来以后,你包括咱们这个也面一些老师一样,就是基本上他一过来以后十多分钟,大概这个人是一个什么情况,差不多就有所了解了,因为见的太多了。你像咱们这个面试大数据的老师,把那些简历你要都拉下来,面的应该超过100个了。
10:03
就光过来的人你知道吗?啊,就是拿到这个简历的等等,就是有的是这个啊,也不说过来,有的呢,就是电话聊过啊直接不行呢,不行就算了,有的呢就是需要他们过来再一聊,其实基本上十几分钟的时间,大体上就能知道这个人是一个技术很好的,还是说一个一般的,还是一个比较菜的,然后后边呢,就是基本上就在验证一个结论了,差不多,那你面试的时候,你想你去公司也是一样,就是你基本上往那一坐,这个看看你这种感觉,在简单这个聊一下以后经历说一说,然后呢聊几个问题,其实这时候基本上这个就心里边有数了,但是呢,还是会尽可能的去聊的透一些,看看是不是真的是这个跟一开始自己初始定义的这样一个想法是一样的啊,也不排除的话呢,一开始想呢,感觉这个人呢,好像不咋行,结果一聊发现诶懂得确实很多,包括一些底层的源码呀,一些架构啊,说的还很清楚,诶那可能还是挺好的,就只是说呢,可能不善言辞,有这样的人。啊,那就需要这个一次就得聊透了,大家呢,去找工作的时候,通常就是当天去,当天的结果肯定就能定,你现在应聘呢,也不是说去应聘公司的这个CTO啥的是吧,一次不行,一轮完了,二轮二轮三轮三轮四轮,然后一拖拖一周,或者像大家这个大学的校招一样,有时候你去那些所谓的好公司,尤其像以前那个微软啊,一轮完了二轮,二轮完了三轮,一拖拖了一个月的时间,他全国校招嘛,他要分配一下,可能各个这个大区的一些这个人员的比例,所以一拖拖很长时间,大家呢,找工作肯定不会这样,就当天去,当天结果就能出来,他要么呢,就是现场,就这个你先给人事聊,人事聊完跟技术聊,技术呢,可能一开始是你这个组里边的一个老成员,然后老成员聊完以后呢,再给这个项目经理聊,甚至有的时候呢,还要见一下公司的这个一把手啊,一把手可能是技术出身的,然后直接呢再去聊一聊,就看公司大小了啊,然后聊完以后呢,再有回到这个人事这块开始谈薪资,这个你要注意就是跟这个技术聊的时候,千万人家最后可能问说你有什么问题要问吗?
11:56
这时候该问还是不该问呢?可以问是吧,可以问你可以问,问什么问题呢?你可以问说咱们目前呢,我要是过来的话呢,咱们是做什么项目,我需要参与做什么,咱们整个一个目前项目的一个架构是什么,这个大家你就能清楚,你过来以后你能不能做了,他这里边儿用的是哪些技术是吧?有的同学呢,就不好意思问,回来以后呢,问说老师我该去哪个呢?这个去我能不能干呢?那你之前怎么不问人家,人家是用的什么呀,对吧,你也别藏着掖着,你就不好意思是吧?呃,别不好意思,该问就问,但是千万不要问说给我开多少钱对吧,尤其是跟这个做技术的,你不要了,人家要主动说了,说你这个,呃,你对薪资有什么要求,或者你之前上一家的薪资是多少,他要主动提了,那说明这个做技术的人,他还是有这样一个权利定你这个薪资的,那你就跟他去聊一聊,他如果要没问,千万不要问,尤其像第一个人是组里边的一个老成员,先让他过一下不行呢,就就算了,好的话呢,才得交给这个开发组长或者项目经理再去面那老师。
12:56
腾序员这个大家工资都是背靠背的,你上来直接问他说这个薪资能开多少,呃,这个这个我我这这个20K以下的我就不来了,结果人家才17K是吧?啊这个肯定就给你干掉了哈,跟人聊也不合适,就回到这个人事这块去聊,那当天的话呢,可能人事就跟你说了,说诶能看到多少,说你要不要来,什么时候能入职啊,一般是这种,你要是说当天没有告诉你呢,他可能说诶当天晚上的时候呢,会给你结果,最多呢就说说这两天会给你结果,但通常情况下呢,超不过两天这个结果都会能出来。
13:30
啊是这种的,不会说拖很久的这种情况啊,行,这个呢就说的多了一点了啊,再拉回来就是在面试的时候呢,这种感觉还是比较重要的啊,像刚才这个虽阳讲这个问题说的呢,这个感觉就比较好,就是比较自然一些,就是呢,让他感觉呢,就是这个东西呢,你是自然的一个流露,确实呢是清楚的,而不是说呢,大家找的那种感觉,就是一看就学生气很浓,然后呢就是咔咔咔,就是死记硬背的是能感觉到的啊,应该是自然一点的这种情况啊,那么关于这个等等和ECO的话呢,这个大家是要掌握的啊,等等可以用于基本数据类型和引用数据类型。
14:09
啊,刚才说的也没有问题,我就先不在这多说了,一会咱们复习的时候呢,再提一下这个ES话呢,哎,刚才提的也是对的啊,就是提到这样几个事。E化呢是一个方法,我们呢只能使用在引用数据类型之间。那表示呢,就是比较两个对象是否相等,那这里呢,就涉及到问题,就是如果我们没有重写E口方法的话,尤其呢,就是说的我们自定义类了,那咱们就是用到object当中定义的这个equals,哎,Object当中呢还是一个等等,所以说比较的还是两个对象的引用地址是否是相同的,那么对于像有些类呢,重写过了string呢,包装类啊,File啊,Date啊这样类重写了,它重写的话呢,比较的就是他们实际存储的这个内容。
15:00
是不是相等了,那对于我们来讲,如果我们在重写当中需要去用自定义类的以后的方法了,通常咱们都是重写的,那重写的规则呢,就是比较两个对象的这些实体内容呢,是否是相等的。哎,就是这样自然的,你把它说出来。那就肯定是没有问题的啊,而且你也不怕他再去深究,比如说那平时我们什么时候去重写ec啊,后边呢,咱们会讲集合讲,讲完咱们这个第一这个部分叫Java,其实Java SE的一个基础部分以后,咱们紧接着呢,讲这个Java的SE的一个高级部分,这里面呢,就涉及到这个集合,在集合里边的话呢,我们及到呢,像set,它是用来存储不可重复的元素,包括呢,哈希、map,这都是咱们开发当中用的还是比较多的,尤其是哈信map用的多一些,那我们在存储到set或者是map当中,呃,具节具体这个细节就先不多说了啊,就是它会涉及到比较这些对象呢,是不是相等的。
16:00
像这个set里边呢,它是拒绝存放相同元素的。这个所谓的相同不是说呢,你是同一个引用了,就是拿的不是等等判断的,而是拿的equals判断的,就是我比如说我里边放了一个customer叫Tom,这个12岁了,我再这是C1,我再想放一个C2,又new的一个对象也叫TOM12岁,这个是放不进去的。那也就相当于我们是用的ES来判断是不是能再往里放的,所以这呢,就涉及到重写ecos的一个问题啊,这咱们讲到后边时候再说,也就是说呢,你又把一个ES,它的一个使用情境呢说了一下,那这个就很完美了,所以开发当中,其实我们答一些问题呢,是有套路的,整个的套路来讲就是先直接呢去描述这个问题。抛了个问题,先直接的给他描述一下,描述的时候呢,可能有五个点,那当然你要都说出来,那很完美,但有的时候呢,你可能出于紧张啊,或者是这个这个题目特别多,然后复习的又不到位呢,这块呢,五个点就说了三个点,剩下这两点给忘了。
17:01
忘了,但有可能这两点还挺重要,怎么办呢?这就是你的套路,就是当你遇到遇到问题的时候,先直接去描述它,描述呢,你觉得你已经没有什么词汇再去描述了,这个时候呢,你想想你开发当中怎么用的。或者你后边怎么用过这个知识点,怎么用的,你就这块把它的使用情境呢说一下,那它的那个使用情境你能记得住的那个,那一定是开发当中比较常见的,那你这样一说他也就明白啊,这个你确实是用过,是熟悉的,尤其呢,多举项目当中你是怎么用的,他不问你,你你主主动去说这个他就知道啊,确实是清楚不用,而不是单纯的死记硬背,这是一个套路的问题啊,行,这就过了,然后下一个呢,我们需要去重写这EQ方法,这呢我还是出了这样的道这样一道问题的,就是虽然说咱们真正开发当中呢,不会去手动的重写这个ECO词,但是呢,咱们还是呃希望大家呢,讲这个题的时候呢,还是要写一下,对,咱们后边讲比较两个对象大小的时候,两个对象呢,我们说不可以直接比较大小,我这造了一个男人啊,又造了一个男人,这个两个男人直接大于等。
18:17
等于小于等于,这这是绝对错误的,但是呢,我们可以比,可以对这个对象进行排列倒是,但那时候排列呢,不是硬生生的直接去比较它俩谁大谁小了,而是拿它们当中的某一个属性,可能是一个整形的,我们去比较大小了,整形或者是死锥形啊,都可以考虑让他们去比较大小,到那时候我们会去重写相关的叫compare,或者叫compare to方法。这个内容呢,也是等咱们讲到后边的时候呢,再说,讲到那个集合的时候再提。啊再提,但是那时候呢,重写的compare和compare to方法和我们这个equal方法里边的这些逻辑呢,是比较像的,所以大家呢,目前呢,写equals是对那个时候的一个储备啊,逻辑上的一个储备,行这块的话呢,咱们快速的写一下啊说如果我们这个obj跟咱们当前这个调ECO的方法的引用呢,是一样的。
19:12
哎,我就return一个处,否则否则的话呢,就是他俩已经不一样了,这时候我们就先看人这个OBD呢,是不是我们当前这个类的一个实例。是不是我们的一个user,哎,如果你要是一个user呢,咱们还比一下,如果连user也不是直接就return for了,行,这个你加上一个else,然后把这个return放里边也可以。如果你是当天类的一个实例,那我就先把你做一个强转。相乘完以后,这时候呢,就比较一下当前对象,首先有个A和我们这个你形态的这个对象,它的A呢,是不是相等,这个又写错了两个,这个A相等的情况下呢,还得再比较另外的属性,就Z4.2name这个游戏要注意对点e cos可不能写成等等了,叫u.name。
20:10
就是如果他要是没有特别提的话呢,那我们就把这所有的属性呢,都写到里边,有的题目呢,可能会说说我认为这两个对象叫ES呢,只是看它们的name就行了,只要你name一样,我就认为你是ES的,那咱们就把这个删掉。就是看这个题面的这个要求了,看题面的要求行,那目前呢,没有明确说,那咱们就把所有的属性呢,都考虑进,考虑进来看看每一个呢,是不是都一样,都一样的,那就是出只要有不一样的就P。行,这个大家呢,要下来再写一写,不熟的,下边一个八种基本数据类型对应的包装类,这个应该所有同学都要会写。尤其里边两个需要特别注意的in,这个叫inte int j,嗯,然后还有一个叉叉,那个叫开REC or和ERER行,其他的话呢,这个应该都清楚,下面一个涉及到基本数据类型,包装类和string,它们三者之间的相互转换,这个我们只需要记住大家那个简化版就行。
21:23
简化版就行,不用大家把这里边儿三者之间转换的所有方法方式都记住,没有必要。简化版的话呢,就是首先提到基本书类型和包装里,它们二者之间对咱们就直接直接呢,自动装箱,自动拆箱就可以了。不用研究的那么细致了,说我得你构造器啊,或者我得调那个叉叉叉VALUE6啊等等就不用了,然后他俩呢,自动装上插箱以后呢,其实就看着就直接就生明义了,直接就生明了体,这像哎,我就直接写个十了成这种了,那么我们把它俩呢,可以看成是一个整体了,跟string之间怎么转,那首先提到呢,他们俩想转化成string怎么办?
22:06
对,这呢我们用的是string的方法,这时候有个小技巧,就是把它俩看成个整体的话呢,这个整体想转换成后边这个,你就去后边的找方法,你要把string呢转换成他们前面呢,你就去前面里找方法,基本数类型又没有方法,那就去包装这里找方法,所以呢,前面这个呢转成string,你去string里找,String里边有好多重载的,叫value of,这呢是你具体这个类型。继去这找就可以了,真的是转化成对,那要是对呢,转化成这个基本书类型或者包装类。这是这个这样我补充完整一下。那这个时候的话呢,你就去后者里边去找方法,那就去包装类里找了,比如说记我们找的就是叫pass int,你要是布尔呢,就pass布尔,所以就pass叉叉叉。
23:09
这样里边呢,就是你放在这个字符串了。就可以转化到一个基本数据类型或者是包装类这样的一个对象,大家呢,只需要记住这两个方法,还有这两个事儿就可以了,回头呢,我们在开发中如果要用到的话呢,大家就可以把它们三者之间的自由的去转换,这就行。好,这呢是咱们出的这五道问题。
我来说两句