00:00
好,看一下今天呢咱们这五道问题啊,嗯,今天呢,这几道问题呢,又都基本上是描述性质的题目了啊,这个代码题呢,我就没有写啊,但是大家呢,肯定每天这个时间集中在还是写代码这个层面上啊,就是一边写代码呢,一边呢跟咱们讲的这些知识点呢,融合在一起啊,就相互之间的啊,就不要单纯的去背这些知识点啊,背完以后不会写代码就没有意义了啊,你要是写代码的话呢,完全不知道这些知识点,那肯定也不行是吧,就是你只要会写的,那肯定知识点呢也得是清楚的啊好,那我们来看一下诶第一道题什么是方法的重载,嗯,实际上呢,我们讲这个重载的意义呢,倒不是说呢,非得让你知道说一个类里边那几个重名的,那就叫重载啊,说你要知道和不知道有什么区别呢,其实也没啥太太大区别,关键呢,就是我们通过这个重载呢,当时讲了一个知识,就是咱们如何去确定掉的是某一个方法。
01:00
对吧,这个是重要的,呃,就是咱们在一个类当中呢,是可能写写一些这个叫同名的方法的,关键呢,我们在定义的时候,包括咱们在调用的时候,你得知道我调的具体的确定是哪一个啊,咱们编译器也好,它一定得明确知道你调的哪个方法啊,在这里涉及到个问题,就是说诶,在一个类里边呢,咱们有可能是定义一些同名的方法,哎,所以呢,仅仅通过方法名哎去确定一个方法是不行的,哎,那就要求参数列表了,哎,那这呢就明确提出来。哎,参数列表一定得不同对吧?哎能跟上这思路吧,啊对,就参数列表一定得不同啊,那这样的话呢,我们就能够确定掉的是某个方法了,这个是有意义的啊,咱们写代码是有义的了啊那只不过这里边呢,就把这个呃方法名一样,参数列表又不一样的方法起个名啊叫重载啊就这个意思啊行,那这个大家写的话呢,这应该呃都应该能写出来啊呃整体来讲的话呢,就是咱们总结的叫呃两同诶异不同,哎两同指的是同一个类是吧?然后哎相同方法名哎不同的呢是哎参数列表哎不同,哎参数列表不同呢,这个展开也行,或者不展开也可以啊,但是你自己得清楚,参数列表不同呢,诶都体现为什么样的不同,其实是吧,嗯,就是主要呢,其实你就记住一个不算就行了,就是你要是光那个参数的类型。
02:32
啊,就个数也一样哈,然后类型也一样,光那个参数名不一样,那不算对吧?哎,我们不能按照那个参数名去区分,叫参数列表不同啊,我们可以按照个数参数的个数,可以按照这个前后排的这个参数的类型啊,都可以去这个认为它是参数列表不同啊。对啊,就是严格按照定义就行了啊,另外多余的话呢,可说可不说啊,比如说跟这个呃,权限修饰符啊,繁殖类型啊是吧,包括参数的这个呃名字啊都没有关系,哎,这个可说可不说啊。
03:12
行,哎,刚才咱们呢,说了这个事儿,就是说这个方法的重载,其实这个概念呢,倒不是说大家非记不可是吧,关键呢,就是咱们刚才说的一个问题,就是如何啊确定啊调用的啊是啊或者这样说吧,如何这个调用,哎确定的这个方法,哎这个呢,对咱们写代码呢,是有意义的啊需要大家清楚的,那就是首先呢,咱们通过方法名哎指明了,哎我是调某一类这个功能的方法了。呃,比如说像salt和race里的那个salt,那你一定要salt,哎,知道这排序了啊,但是呢,它可以给很多很多类型的数组排序,那接着呢,我们通过这个参数列表。诶,我们去确定到底调的是哪一个,诶因为呢方案名可能一样,但是嵌L列表呢就一定不一样,诶这个呢,对咱们写代码呢是有意义的啊好,这个呢,不是这个题型的考察范围,这个可以不写啊。
04:13
好,第二个说Java方法中的参数传递机制,具体体现这个呢,咱们只要是写Java代码,大家自始至终都会用到这些知识点。啊,都会用到,就是我们这个知道Java呢,之所以这个强大呢,其中一方面呢,就是它提供了强大的一些类库了,啊,就是很多都是现成的,那我们能直接调就行,而这个所谓的强大的类库呢,主要体现就是你这个类的这些功能,功能呢主要体现的就是方法,所以我们呢,呃,常常的或者极其频繁的去调用一些方法,不管这些方法是API提供的,还是我们自己写的是吧,那只要涉及到调方法,那很多的方法呢,都是有参数的,呃,这个带形态的方法呢,应该占的比重要偏大一些啊,那只要你涉及到调方法传参数,那这呢就涉及到叫参数的传递机制,哎,所以这个呢,也是需要大家必须掌握的点。
05:07
啊,必须掌握的点,这个我找同学说一下啊,具体的这个体现是什么。姜春阳。呃,就是两种,一种是。嗯,当这个参数是基本数据类形式,嗯。传递的是什么啊,对,就是本身我们这个基本数据类型,它所存储的这个,呃,数据值,嗯,对,然后。还有一种呃,引用数据类型,嗯,内存的引用,引用具体来说的话,其实就是存储的,诶你这个对你这个应用类型呢,我们说像类啊,数组啊,这都算接口,咱们还没讲,先不管啊,就是真实的你这个呃,对象实体或者叫数组实体,在堆空间当中的那个首地址值,呃关键的是把这个传过来啊,当然这个时候这个地址值其实呃咱们也也打印过哈,其实呢,我这儿的地址你可以把它理解成就是包含这个,它还包含一个什么呀。
06:17
对,你这个变量的数据类型啊,诶还包含了这个变量的数据类型啊嗯,行,哎,就是这个点啊,哎,这个大家要注意一下,就这个数据类型呢,它也是含着的,咱们打印的时候呢,这不也都见过不止一次了啊呃,也就是说什么意思呢,比如说啊大家看。我这呢声明了一个person啊,这个PE咱们用了一个person这样子,然后呢,我这有一个user啊,我叫U1,就是假设这个user跟person呢,没有任何关系啊,没有任何关系就是咱们后边可能会讲这个继承啊等等,它们俩之间就是独立的两个类啊,没有什么关系,这个时候呢,你是有没有办法把这个PE付给UE啊,这样写的话对不对啊,编译运行能通过吗?
07:05
有同学没这样写过是吧?那就得分析了,能过吗?不能过啊,这个呢叫编译错误啊,为什么错了呢?对啊,有同学可能就提到说,诶,这个P1存的不是一个地址值吗?U1存的也是个地值,我把P1付给这个U1不就行了吗?哎,对这呢,可以从两方面去给你解释啊,一方面呢,就是我们存的呢,其实不只是个地质值,哎,还得有类型的啊,还是有类型的,就是我们能付的前提呢,就是咱们的类型也得是一致的是吧?这呢,咱们前面不是做过这个问题吗?在讲数组的时候也做过这个题,还记得不做过这个题。还记得吧,咱们客户不有这个题吗?哎,通过这个题呢,当时我明确说过啊,其实这里主要考察的就是这个符号,诶这个符号呢,赋值都知道。
08:08
那么能付的前提就是要么你右边跟右边这个类型跟左边这个要付的这个付给的这个变量类型要么是一样的,对,要么呢,就是你满足那个自动类型提升是吧,后边咱们还会讲一个叫多肽哈,其实跟那个自动类型提升基本上是一个意思了啊,你得满足这样的特点才行,那很显然你右边这个呢,是person类型的,左边是个user类型的,它俩类型呢,首先不一样,其次呢,也没有所谓的自动令提升这回事儿,哎,所以说呢,这是坚决不能负的啊,这个呢,是通过咱们已经讲的这个知识呢,你是可以回答的。哎,另外一方面呢,就是经常给大家讲,就是这种所谓的叫叫叫这个逆向思维哈,呃,逆向思维或者呢,就有一类非常好的一种解决问题的方式呢,叫做反正法。
09:00
呃,这个大家上这个中学的时候应该都学过这种反正法啊,其实这种方法确实是一种非常厉害的方法啊,一个是反正法,一个叫什么直接带入法是吧,就是呃,让你算这个结果是多少,这个你直接带个数进去就算出来了啊,这个是挺好使的一种方法,还有一种呢,叫反正法啊,就是你想证明这个事是正确的可能挺困难的,但是你想证明这个事是错误的,可能就比较容易是吧?呃,你想证明这个事是正确的呢,你可能他有这个十个实用情况。啊,它有十种情况,你想证明它是对的,那每一种情况都得是对的,它才是对的,但是你想证明它是错误的呢,很简单,它只要有一个不满足啊,他这个就整个就错了是吧?这这就是相当于反政法一种思想一样哈,有点像什么呢?就跟说咱们国家搭建这个防火墙啊,就是中国的这个防火墙,这个叫长城是吧?呃,这个呢,呃,没记错的话呢,这是北邮的这个那个校长,然后呢,他主持搭建的啊搭建完以后呢,他现在也获院士的啊嗯,就是搭建这个防火墙,然后呢,这个防火墙以他为代表的啊,包括有很多的像杀毒软件呀,包括呢,像这个苹果的这个OS系统啊,诶很多人都这个IOS1更新,它就第一时间呢试图去破解它是吧?啊,那这里就涉及到问题,你说是比如说iOS为例吧,你说是这个iOS这个系统的写系统的这帮人厉害,还是说呢,就把他这个系统给破解了,这帮人厉害啊,有说破解的厉害的呀。
10:33
或者说呢,差不太多或者怎么样的,肯定还是写系统的这帮人厉害啊,写系统的这帮人还是要更厉害一点的,你想我为了让这个系统呢不被攻破,你可能要考虑的点呢,有几千个甚至上万个点是吧,但是他攻破你这个的话呢,只要找到你一个小漏洞就可以了,对,就像你大家看那个古装戏,就以前那个欧洲外拍那种就战争片是吧,就攻一个城,这个城其实你你要想不被攻下来,建立的非常牢固,那得考虑的点太多了,结果呢,就一个下水道没考虑到,诶,然后呢,就顺着下水道给你一个炸弹给炸开了,然后就进去了是吧,就是对于这个这个宫的这些人来讲的话,他其实只要找到一个小的楼栋就行,但是你要让他去建这个长城,建这个城墙,他可能建的不一定有那帮人好,对吧,他就相当于只要是找到一个小点就可以了,但是见这个人呢,那就方方面面都得考虑到,那其实就要更难一些啊,你看你体会一下这个事情啊。
11:33
那这里反正法就是这样子,属于就是你要正面的想去给他攻下来,那其实很困难啊,但是我只要找到一个反例,诶,那你这个这个这个概念啊,或者这个结论啊,定理啊,就哎一下子就坍塌了是吧,属于这种啊好,那咱们看这个问题也是一样,那我们现在呢,想证明这种方式是错误的,刚才咱们用等号,其实直接描述的就算是正面的一个证明,但是如果你要是诶不清楚,或者说呢,不是,那么很快的反应到了,你也可以想象这种反正的方式啊,反正法的一个前提就是我们先假设它是可以的。
12:07
你要假设它可以的,那就我们这个PE呢,是可以付给user的是吧,那可能会带来了一些问题。想想会有什么问题?就是我随便的一个引用类型,只要是个地址,我就可以付给另外一个变量的一个地址,首先一个点就是那Java呢,说是一个强类型的语言,那你强到哪了,随便付乱套了是吧,想怎么付就怎么付。哎,我这个,呃,Person类型的,相当于就是我们这个变量明确指出来是person类型了,但是你可以付给其他任何类型,那不意味着Java里边就没有所谓的这种类型了吗?是吧,这就这就是一个点,嗯,跟我们已经讲了一些知识,你发现矛盾了,那反推回来,这样不可以。是吧,这是一个点,另外一个呢,你也会感觉有个知识人会比较奇怪,比如说比如说咱们这个person当中,我定义了一个方法叫做it吧,乃至于是我定义这个属性叫做edge,嗯,那咱们呢,造完这个对象以后,自然而然我就可以通过这个P呢去调这个it,或者是这个edge啊,那对空间当中也一定会加载这个A啊,那如果说你这个PE可以付给这个user的话,那接下来你想想我通过这个U1。
13:24
啊,按说呢,也可以去调it是吧?啊或者说通过这个U1呢去调H。啊,那就成为合理了,但是呢,我们这个user,可能这个类里边我就根本就没有定义过,It或者是age,我都没有定义过,你让我这样去写编译过不了,但是你运行的时候,你又说好像它里边又有,这不又矛盾了。是吧,诶就是大家呢,就是慢慢的咱们讲面向对象,你这个知识体系搭建起来以后,诶后续的咱们一些内容,当你出现一些程序报错的时候,大家就可以去解释啊,说叫因为什么什么所以怎么着不行,怎么怎么可以,诶就是前面的这个知识体系呢,咱们这个底儿基本上慢慢的就搭建起来了啊当我们讲完面向对象,顶多再加个异常处理等等,那后续的大家学集合呀,多线程啊,L流啊等等,其实有很多知识点咱们都可以讲因为所以了。
14:18
啊,那前期搭建这个知识体系底层这个时候呢,呃是有一定的难度,因为大家没有过任何积累啊,这个有了这个以后呢,后续就快了啊。行,哎,这个话呢,我们就把这个事儿就说清楚了啊好,接下来说这个纯原变量和局无变量在声明的位置上是否有默认初始化值啊,是否有前沿修饰符,这个内存分配上有什么不同,呃,这个呢,实际上是咱们在之前一天讲的这个内容。啊,然后这块呢,因为它也是一个重点,我就考察了一下啊嗯。我也不找同学说了,这个呢不会的,下来呢看一看,需要大家清楚啊,作为基本的点呢,要掌握啊,就是变量的话呢,咱们肯定少不了用。
15:04
你肯定是要用的,那变量呢,从我们这个,呃,在类中声明的位置上来分,就这两种,哎,成员变量或者叫局部变量,所以这两个应用的话呢,大家一定要熟,所以这个点呢,这几个都要会。啊,都要会啊,下个这个return关键字啊,这也是咱们之前讲到的这个一个关键字哈,这个return的话呢,主要呢,其实就用在方法内。嗯,它的一个作用呢,是什么呀?对,咱们其实说了它有两个作用啊对,首先第一个作用呢,大家先明确的就是它的第一个作用叫结束方法,对,就类似于我们在break的呃,在那个循环当中用break一样啊,诶那个循环中用break呢是结束循环,这个在方法内用return呢是结束方法,哎,是这样的啊,那其次的话呢。他还顺便多了一个功能,对,就是有返回值的情况啊,就是针对于有返回值的这个方法呢,我们return还可以加上一个返回的这个数据。
16:12
诶,你这个数据可以是个变量,也可以是个常量,就相当于呢,我们针对这样的方法,我return呢,除了接入方法之外呢,还可以顺便呢,帮你把这个数据返回去。哎,这是它的两个作用,行不多说了啊第五题,诶第五题的话呢,又是让大家画这个内存图下来的,一定要动手画一画,嗯,只要你这个画收以后,后续再去看这个代码呢,你就不怕了,你说诶正确你你你你认为这个结果应该是五,结果他得出来是三,这个时候呢,大不了就画内存图自己画一画,画一画,你就知道为什么它出来是三了。啊,你就不怕这个事儿了啊,而且通过内存解析呢,大家能够更好的去理解,呃,咱们说的这个面向对象中这个对象的一个加载的过程,包括你调用方法呀,调用属性啊,整个这个操作过程是什么样子的,诶这呢相当于是一个内功。
17:05
啊,像那个内功一样,哎,当你这块熟了以后,后边呢,我们再学后续的内容,你可能就不用老师去画了,因为心里边都已经很清楚了啊,属于这种啊嗯,把握两块内容,大家呢,画这张图呢,就不怕了。啊,怎么怎么变都不怕,第一个内存的这个结构。啊,内存这个结构我们提到的有占结构站里主要存放的是局物变量,它这个要记住它啊存放局物变量,然后堆里我们存的是哎扭出来的结构,哎主要呢,体现为就是。对象还有数组吧,目前呢,咱们就涉及到这两块,呃,关于方法区的事儿呢,咱们目前还涉及不到,所以大家呢先不用管,就是你先记住这个事儿,先记住这个事儿好,第二问题要想能够把这个内存图都画正确,除了这个事儿之外呢,还得记住个事儿,就是这里提到叫局部变量,提到对象,提到数组,对象数组这块呢,大家基本上不会混。
18:19
啊,基本上不会混啊,你又出来一个呃,New后边加了一个类,加个小号啊,知道这是一个new类对象了啊,然后new了一个数组啊,这个大家肯定都不会混啊,关键就是这个变量这块啊,你需要呢,再清楚的点就是关于变量,哎,我们分成叫成现变量,对,还有这个叫局部变量,你得知道哪些变量是局部变量,这个要不你也整整不清楚是吧?哎,那局变量的话呢,像我们说的这个方法内。方法行参,这是咱们目前见到的就这两块了,嗯,后续的还有叫呃构造器内,构造器型参,今天呢咱们就会讲到构造器,哎这就也包括了,哎在第六章呢,叫代码块内,哎这呢都叫局部变量。
19:11
哎,都叫做局部变量啊,那成员变量呢,这个就比较好理解了,就是凡是这些变量,你要是画它内存到底在哪,那就一定在这,哎在这啊,那同时的话呢,就是像这个堆呢,我们说的这个对象这块呢,在这补一下哈,咱们的成员变量,诶成员变量是在这个对象这块啊。当然了,到目前为止咱们是在这块的,哎,后边呢,咱们还会讲一个叫static修饰的成因变量,诶那个的话呢,就不是在这个堆里了,就是在我们的方法的方法区的这个静态玉里了啊,但是咱们现在没有讲死static,大家就当还都不知道这个回事啊,目前呢,我们就都是这个样子的啊,这块严密一点的话呢,我们就就得这样写的叫非static的这个成现变量啊,行,你就把握住这两个点,你再去画我们这个内图,它就一定错不了。
20:06
啊,只可能说你还不熟是吧,哎,我们只要是画正确的话,就从这里边儿去不断的映射这个知识就可以了,啊,那么这个结果啊。结果的话呢,大家判的时候呢,也是先看他结果对不对啊,这个结果对了的话呢,那简单看一下这个过程没有问题呢,就按对了,结果错了,你再这个有三个是吧,你大概20分就平摊除以下三,那你看这个给他怎么加分哈,这个正确的结果应该是。多少先输入这是吧,十五零二十对吧?哎,十五零二十,这就是咱们上课讲的那道题,当然了,大家没有必要去记这个结果啊,我这也没有变数,你变了数也得会,那就是你你还是掌握这个本质上的这个怎么去画啊,不要记这个结果,而且这个十五零它是换行的啊,下一行是20啊。
21:07
行,这是咱们这几道题。
我来说两句