00:00
诶,下一个说面向对象思想,这个体现具体呢,涉及到对呃类和对象创建和执行的哪三步,诶这个呢也是一个非常重要的问题,昨天呢,其实我们讲的这个重点的东西还挺多的啊,我这呢都写不完了,比如像关于属性这块,我就没有考察大家啊,但其实也是需要大家来掌握的,行啊,那这三步的话呢,自始至终咱们写程序都其实遵循的是这三步啊,其实遵循的基本上都是这三步啊,这个我找个同学再来说一下,在旁边吧,这个操纵他。那做做着说就行啊,哪三步啊类嗯第一步呢叫创建类,嗯第二步嗯,New对象,New对象呢,这个说的稍微规范点呢,就是创建类的对象,或者呢叫类的实例化是吧,都可以啊然后。
01:06
然后在。这个调用对象的,那就是通过呃,就是或者我们要调用这个对象的结构,哎,通过调用它的结构呢,来完成咱们这个功能的一个设计啊哎,这个调用结构呢,典型的就是调属性和方法对吧?哎,这个目前的调用呢,咱们都是通过对象去点这样的调用,诶哎通过对象点属性,哎或者呢是对象点方法,好这是咱们目前呢,诶都是通过这样的方式呢去操作的,来完成咱们这个题目的一个设计的要求啊行啊,这就是我们说的这三步,大家呢也都需要掌握。
02:03
啊,就是今天呢,咱们考察这里边呢,没有代码题了,这个如果说呢,你说老师我这里边四道题我都不会,但是呢,代码我全会写没问题可以是吧,但是通常呢,不会有这样的极端情况出现的啊,就是大家呢,一方面呢写代码,另外一方面呢,就是有一些知识的话呢,也是需要你得清楚的哈,它其实是相辅相成的,就像说这个,呃,两个腿走路一样啊,就是你这两个呢,它是相互依赖的这种啊,不可能说你代码超级牛,然后呢,语言知识一一句话说不出来,也不可能,也也也最好不要什么呢,就是知识呢说的溜溜的,然后代码呢能力特别差,呃,这也不行啊,就是这个是两手都要抓,两手都要硬啊,然后呢,下一个叫第四题来画,我们这个内存解析这个结构的啊,这个的话呢,我们再带着大家去画一下。
03:02
好,看一下我们这道问题。看这啊。嗯,我们呢,要去画这个内存图,你不要从这去看,呃,直接呢看我们的内方法从程序这个入口开始来,首先呢,我们用了一个car叫C1啊,又用了个car叫C2啊,关于它的一些操作,那首先呢,我们这声明出来,它这个栈和堆啊,这是站那右边呢,这是我们这个堆空间啊,这个稍微的再往这边点啊行,那么在占空间呢,我们声明这个变量叫C1。哎,先摆到这儿,哎,在对空间当中,我们拗了一个对象,我们说拗出来的结构呢,都是在对空间中,这呢是拗的一个对象,这个结构呢,我稍微颜色上换一下啊。
04:04
好,这呢是我们又出来的一个对象,那这个对象的话呢,就会有一个地址值啊这呢有个地址啊,这个地址值的话呢,这这颜色上都是一个蓝的了啊哎,我就这样吧,0X8899把这个地址付给我们的C1。那我们这个通过占空间这个C的地址值,就能够找到我们这空间中这个对象的这个试题。好,这样的话呢,我们就能够找过来了,嗯,那么在我们这个堆空间这个对象当中呢,哎,我们说这个类的属性都是放在堆空间当中的啊,那这呢,我们去找这个属性,哎,这个注意咱们现在这个属性呢,我都没有涉及到关于static的问题啊啊大家都先把这个呢先忽略掉,嗯,有同学可能预习过呢,会知道诶呃,并不是所有的属性都在这个堆空间中,这个咱就先先别说那个事儿了,因为大家都还没见过呢,还啊目前呢,咱们这个属性都是非static的,那都是在堆空间当中啊,声明了string型的color和int型的number,而且呢,还都给显示初始化了。
05:18
在这里边就有color,哎,然后还有叫number,那么其实来讲啊,这呢,我们就要显示的给它赋值了,其实的话呢,咱们昨天也提到过,提到过关于属性的一个默认初始化的情况啊,在这块呢,跟这个属跟这个咱们前面讲的数组是一样的,就它其实呢,也是先给我们这个color呢,呃,有一个值,这个就是个no,然后这呢是零对,然后的话呢,咱们有一个显示负值啊,就是你可以理解为呢,就把这个值呢,原来的就没有了,哎,把它呢改成是一个red啊,这是改成个小指针了这个啊。一开始还得有一些做一些调整。
06:00
改成是叫red。哎,然后呢,下边这个呢,改成是叫四。哎,这个画内存图呢,这还是需要挺细致的啊,哎,这来个四行,那么到目前为止呢,咱们第一行代码呢,其实就执行成这样了啊,到这呢就执行成这样啊,是关于他的没有别的属性了,那下边接着呢,他又又用了一个这个C2啊,那这个操作呢,跟我们刚才这个C1的操作呢是类似的,这个我就快速的来创建一下啊呃,首先呢,也是在对空间中用了个对象,然后呢,这个也有关于这个属性的一个赋值,呃,这个负的初始化的这个值跟我们这个,嗯,刚才这个一的这个情况呢,又是一样的,嗯,这个我们还得把这两个都得拿过来啊。
07:04
那是也是这么着的,那同时呢,这块也有一个地址值,呃地址值的话呢,肯定是另外一个地值了,诶不可能这二者的在创建的时候,这个地址是一样的,这不可能啊,这个我叫8800,哎付给我们这里边的8800这个C2好,那么对空间啊,占空间中呢,我们这个C2呢,就指向了,哎对空间中你刚创建的这个对象它了,那此时的话呢,对空间中就有两个对象,哎接着呢,我们看下边的操作,我通过这个C1呢调color改成blue,通过C1调这个color属性,哎,原来是red,现在改成blue啊这就是把它干掉。哎,这个改成叫补录了啊好,然后的话呢,我们就是调C的受方法,C的受方法,那我们就过来,哎,通过对象来调这个方法啊,调方法的时候呢,我们在方法内一上来呢,定义这个变量A,这个咱们现在不关注于说你这个属性到底是,或者这个变量表示的是什么意思,咱们关键的是画内存图啊,这个你看到什么结构了,该在哪那就放哪,这呢是一个局部变量。
08:11
局部变量的话呢,都应该在我们的这个站空间中,对,所以这个小A在我们站当中,这个小A,这个小A的值是十,那你就给大家写上一个十,哎,然后接着的话呢,我们这个去输出一下这个color啊color,你color呢,这个你注意谁调这个方法,调这个方法的对象就是我们这个color这个属性的那个对象。啊,因为咱们到目前为止说的就是这个属性啊,这些属性呢,它都是归具体某一个对象所有的,而且呢,咱们还提到说每造一个对象,哎,这些属性呢,都独立的有一份啊,就是你是你的,我是我的,咱们都有一份,所以呢,我们这个抛开对象谈属性,到目前为止它是没有意义的。
09:01
抛开对象弹属性是没有意义的,因为这个对象一这个属性呢,一定要归到某个对象里啊,那现在呢,我们要输出这个color和number,你就得看我要输出的是谁的哪个对象的color或者是number。啊,那这时候怎么判断呢?那就是谁掉这个受方法,那我这个color就是谁的。啊,那我们现在呢,是拿的C1调的show,那我们这里边的这个color和number呢,就是C1的,哎,记住这个事儿啊,哎,那C1呢,诶这个忘了改了,这是一个C2啊,诶C1的话呢,去调这个number也好,Color也好,该是什么那就是什么,哎就这个情况啊,上面你改成录了,所以你再调这color,自然而然的就是补录了,这个就是四,哎,然后呢,我们通过这个C2呢去调这个寿,哎C2调这个寿,这时候你先注意一下,就是这个通过C1调的这个收方法,调完以后呢,那这个收方法呢,已经结束了。那你在收方法里边定义的这些局部变量,是不是自然而然的也就销毁了,对,其实这个时候的话呢,我们这个A等于十复制的这个数呢,其实它就相当于是要出战了啊,它就生命周期呢就over了,哎相当于这也能看到咱们说的这个叫先,呃后进呢,是先出的啊,后边这两个还没有出呢,上边这个呢已经出去了,嗯,出去以后呢,又接着我们通过C2去掉售,那调售的话,又重新的在里边加载了一个变量,这还是叫A。
10:30
啊,这呢还是一个十啊,然后接着呢去调这个受是掉的,我们这个C2的受,C2调售里边除了加载这个H之外呢,把C2的color和number呢输出了啊,那就是这个red和四,哎这个要清楚red和四好,然后呢,我们这个C2的这个输方法呢也结束了,结束以后呢,这个A2呢,呃,这个A这个十呢也就没有了。相当也就弹出站了啊,那么在站里边呢,还剩它俩这两个变量呢,是定义在咱们这个may方法当中的,随着我们这个收二的C2的这个受方法的执行结束,我们这个may方法呢也就结束了。
11:10
啊,那没方法结束的话呢,我们这个C2和我们的C1呢,也相继的就弹出来了,它俩弹出来以后占空间值就没有东西了,那么意味着这两个指针也就没有了,指针没有,那么在堆空间中进行垃圾回收的时候呢,发现有两个结构没有任何的占空间的这个引用指向过来,那就意味着这两个结构呢,没办法被调用,咱们知道这个,呃,对象也好,变量那个值也好,对调的时候咱们都是通过那个对象名来去调啊,调你这个具体的数据了啊,那现在这个变量名都没有了,那你就没办法再去调这俩了,那原IG呢,你两个就是垃圾,那这时候呢,它和它就相继的被回收掉了,那么这个内存中就没有它东西了啊这个大家去注意一下,我们这个情况啊,好,这呢就是咱们说的这个第四道题啊,关于内存这块的话呢,需要大家下来能够自己去画一画,这还是一个这个硬功夫啊呃,这个画清楚以后呢,有利于咱们下边去写这些代码,呃。
12:10
第二码的时候,一旦有的时候你整不清楚,诶这个到底是是三呀,还是四啊还是五啊,画内存图那你就能够理清楚了,好啊行哎,然后呢,我们来看一下最后一道题啊,这个题的话呢,呃,也是一个基本问题,诶关于属性这块呢,我考量了一下,说还是考一下这个问题吧,因为方法的话呢,大家更不清楚,更容易不清楚啊嗯,那这个说类的方法内是否可以定义变量可以,哎,这个我看大家写的都还行哈,这个是可以的,那是否可以调用属性呢?诶,可以,是否可以定义方法,对这个绝对是不可以的,方法呢,就是一个独立,独立的一个功能啊,咱们都彼此不相关的这种关系啊,然后是否可以调用方法,哎,可以啊,方法内是可以来调用其他的方法的,哎,是这样的啊呃,但是具体要使用上的话呢,可能还会有一些细节了啊这。
13:10
咱们现在的话呢,其实直接把一个方法声明好以后,这有另外一个方法,这个比如说叫M2方法,这叫M1方法,直接呢,咱们就把M2呢写到这里边就可以了,到后边呢,咱们还是会讲一个关键字叫做static啊,到那个时候呢,这种调用它就有一些要求,到目前没有static随便掉啊,放进去就能掉啊,就可以啊,先记住这个事儿就行啊,后边呢,咱们再一点点呢,给大家去完善咱们的这些说法啊,行这呢就是咱们这五道问题。
我来说两句