00:00
首先的话还是这个。程程,程毅能听见吗?程毅。现在能听见吗?现在现在行吗。喂喂喂喂喂喂喂喂喂喂喂喂喂喂。刷新一下。好好好好好好。好了,同学们,咱们开始上课啊,我们首先呢,还是先来简单回顾一下我们这个昨天的一个内容啊,昨天是这个DAY14的一个课堂笔记,我们把它打开,我们来看一下啊,这个这14的课堂笔记这块,首先呢,我们这个。
01:02
哎,第一个啊,是强调了这个画内存图的一个注意事项啊,注意事项那这块呢,主要是想告诉大家,在内存图方面主要体现出数据啊,另外一方面呢,就是画图的时候一定要一步一步来,代码怎么执行你就怎么画啊,第二个为什么要画内存图呢?这个内存图啊呃,有了之后呢,哎,程序不运行我也知道结果,是不是还有一个有了内存图呢,有助于你调试程序啊。呃,其实最主要内存图体现的是我们程序的一个执行原理,是不是,哎,然后再往下的话,就是程序在什么情况下会出现空值异常啊。啊,这个空的引用是不是访问对象相关的数据的时候,会出现控制人异常啊呃,垃圾回收器的主要针对的是堆内存。啊,这个GC主要针对的是堆内存啊。空引用的要理解就是说比如说我现在是student,是不是is。Student学生s new什么呀?Student new完之后呢,你给S附了一个什么值啊,哎,那。
02:04
那就表示S是个空的引用啊,对吧,你要访问s.name啊,对吧,s.age啊,都会出现什么呀,空值异常啊,空值异常因为访问这个name呢,访问这个age啊,他们都属于什么对象相关的一些数据,而你这个对象现在已经没了。对吧,S等于那是不是啊,就相当于现在呢,已经怎么着啊,没有一个引用去指向这个对象了。啊,那你这个对象对在堆内存里边,我们程序员没有办法直接去访问。是不是,哎,所以这个对象就是个废物了啊,所以这块呢,你再往后哎就不行了啊,就不行访问的话就会出现什么呀,哎,空置的异常,非常有名的一个异常信息啊,叫non pointer exception。那么这个出现空值异常,首先呢,我们这个程序啊,在我们语法上是可以编译通过的啊,因为编译器检测到S的类型是student student这个类里面啊,确实它有什么呀,这个name属性和age属性,所以呢,编译器呢能让你通过,但是运行的时候,它和底层这个对象有关系,因为它访问名字一定是访问对象的名字,访问年龄一定是访问这个对象的年龄,而你对象不存在的话,就会出现什么呀,控制异常是不是。
03:10
嗯。方法在调用时参数是如何传递的,那么这个的话大家只要记住一点就行,其实我在这里说了,和那个数据类型啊是没有关系的啊,就你方法调用的时候呢,你传的是个什么东西呢?是把你变量里边保存的那个值给它复制一份传过去。啊,就是你永远记住,永远记住一句话就行啊,记住这句话就不管是哪一种数据类型,对吧?啊,哪一种数据类型的传递啊,都是什么呀,都是将变量,都是将。将什么呢?变变量中保存的什么呀,保存的那个值啊,都是将变量中保存的那个值传复制一份啊,复制一份传递过去。传递过去它都是这样一个规则啊,你记住规则就好了,那么再往下的话,我们昨天讲了一个构造方法是不是,哎,构造方法这一块呢,哎。
04:07
首先我呢,在这个地方啊,我新建一个什么呀。这个va。首先大家知道。我们在这呢,写这个student,我曾经说了,我说什么呀,我说这个类啊,大括号里边如果什么也没写的话。啊,就是什么也没写的话。它会有一个什么叫做无参数的构造方法。是不是你从哪能看出来呀?你在你这里呢,写了一个主方法。在这里呢,我们student s等于new一个什么呀,Student。
05:00
嗯。那么大家想一想这个new后边的这个方法,这就是个构造方法呀。是吧,这个方法名和类名是不是一样啊。哎,这个方法上没有参数吧,所以叫无参数构造方法吧。是不是,哎,无三过的方法。但如果说你现在是在这里啊,定义了一个什么呀,有参数的构造方法。有参数,那么这个时候呢,你的这个程序编译就过不去了,编译就报错了,为什么呀,因为我们昨天讲了,如果一个类当中提供了一个有参数的构造方法,有参数的构造法,那无参数构造方法是不是就不存在了,对吧?哎,无参构造就没有了,就不存在了,所以呢,我们建议大家把无参构造怎么着,哎,手动的给它写出来,如果你手动的给他写一个无参构造的话,哎,那就可以了,那你现在对吧,在六的话,采用这种方式啊,就没有问题,创建对象啊,那么我们构造方法昨天说了。构造方法最主要的作用有两个,第一个作用是什么呀?是通过构造方法干什么,把这个对象给它创建出来,是不是创建对象,并且同时给我们的属性赋值,你比如说我们student里边有什么属性啊,哎,比如说学生有一个学生编号啊,学生有学生的名字啊,是不是?哎,你调用什么呀,我们的无参数的构造方法。
06:17
是不是啊,调这个无三构造方法呢,大括号里边表面这块啥也没有,是不是啊,实际上是给这个number啊附了一个什么呀,零啊,给这个name啊附了一个值向什么呀,None。啊,弗里什钠实际上是这样的啊,你不写它也有啊,不写它也有,那假如说这块呢,你拿着这个I怎么着呢,你假如说在这儿啊,你又调了一次过的方法,Student SE new了一个student,啊new student这个student这边怎么写的呢?哎,这边传了个100啊,传了个100,那么这个100会传给他,他呢,这块假如说付给了number。对吧,那这样的话,如果你采用这个构造方法去调用的话,那么这个100传给ii,传给number,那么注意只有这个number附上值了,这个name name呢没有附上值,但是系统会默认给它赋值,系统会给它默认附一个什么呀,那这个代码你可能是看不见的啊,但它是有的。
07:10
对,所以构造方法两个作用啊,构造方法两个作用各位啊,第一个作用就是创建对象对吧,第二个作用就是给什么给属性什么赋值。哎,或者要给属性初始化,将属性初始化,或者将实实例变量给它初始化出来啊,无论你调用的是无参构造还是有参数的构造方法,它都会给我们的属性附上值,如果你手动指定附上哪个值,它又附上哪个值,如果你没有手动指定的话,它系统会附默认值,这是在我们Java语言当中是这样规定的啊,是这样规定的,经过我们的测试呢,其实也可以得出这样的一个结论啊,我们昨天其实已经讲过这个内容了啊,讲过这个内容了,好了,那这个呢,是关于我们的构造方法,各位啊,构造方法是非常重要的一个内容啊,还有一点就是我们一个类当中的构造方法是可以重载的,重载是什么意思啊?方法名相同,参数里边不同呗。是不是,哎,参数列表不同。
08:02
昨天有个同学问了这样一个问题啊,我在这里呢说一下,假如说我这里呢,有个string类型的number和string类型的name。你最多可以写几个构造方法。各位回答我。最多可以写几个构造方法。就你写几个沟通方法是有意义的。你看这个同学这么写啊。写一个无参的,这个没啥问题哈。写一个什么有参数的是不是,哎,我看他昨天是这么写的啊,有参数的string是不是S怎么着啊,哎,Number附上去,再来一个student。怎么着呢啊,嗯嗯。嗯,名字,然后接下来怎么着啊,把这个名字付给内蒙。然后呢,他又写了一个构造方法什么呢?哎润对吧,S1STRING s2,然后接下来呢,哎,Number附一个S1NUMBER,呃,这个name附一个S2。
09:12
Name一个S2。这个可以写,可以写几个构造方法写四个呀。写四个勾的方法呗,是这意思吗?那我问大家一个问题啊,这个构造方法和这个构造方法是不是重复了。是不是重复?因为你你还记不记得我们曾经说过一个说构造方法,构造方法这个东西。它支持方法重载,重载这个东西呢,是在同一个类当中,方法名是什么?相同的参数列表是什么,不同的是不是,哎,那你这个参数列表是什么呀?String吧。我这个参数里面是不是也是啊,方案名是不是student呀。对不对,哎,那这个是不是重复了方法,所以这两个是不是只能定义一个呀。
10:03
定义了两个这样的吧。是不是,哎,所以说这两个其中有一个是不行的,要么你删掉这个,要么你删掉这个,所以说这个类当中啊,定义有效的构造方法其实就三个,一个无参的,一个带string的,一个是带两个string。那有同学说了,老师我就在这再写一个构造方法咋地吧,我就写一个S1,完了之后呢,S2再来一个S3对吧,反正参数不一样,我三个参数呗,可以没问题啊,但是你这个意义不是很大,为什么你把S1呢付给谁啊?付给这个number,你把S2付给谁啊?哎,这个name你把S3你准备付给谁?所以这个参数没有意义啊,所以在这里呢,大家注意啊,实际上有效的构造方法,其实你就定义三个就行了。你定义这四个肯定会有问题的,我们不妨把这个代码拿过去啊,拿哪呢?嗯。我们就放到这儿吧,加product啊,零二加YZ。
11:03
然后呢,CHAPTER10这块啊,然后直接拿过来放这,放这之后我们来编译一下,看看行不行,Java c呢,我们编一下student.java。我们来看是不是第12行和26行。12行26行哦,都有问题了。有问题正常啊,有问题正常。来再打开我这块好像没有这个构造方法是不是。啊,没有这个构造方法,我传个字块进去吧,行吧。传个int肯定是不行的啊,因为上面没有int了啊,都是string,那这个时候我再来编译一下,大家看现在是不是只出一个错呀,就是在第12行报错了,是不是他说已经在STEM类中定义了构造器。Student和你为什么在12行又来了一次?就是在第12行为什么又来了一次?什么意思,在第12行这又重复定义了,明白吧,所以你这个和这个呢,其实你至少就删除一个对吧,你删一个,所以说呢,有同学呢,他就注意到这个问题了,但是昨天有同学呢,他又没有注意到这个问题啊来我们再来好,大家看这次是不是就没问题了。
12:11
是不是啊,所以说这个东西呢,大家还得多历练,多敲代码,多试啊,光凭我上课讲那点理论呢,其实我觉得是不行的,是不够的啊,完全不够的啊,那么在这里再强调一下,构造方法这块能不能有反馈值类型啊,需不需要指定反馈类型?啊,不需要吧,啊,没有反回值也不能写VO对不对,哎,不能写VO啊。呃,那么构造方法的方法名和类名是一致的。啊,然后呢,我们的括号里面呢,你看传什么参数大括号呢,其实就是构造方法的方法体,叫构造器啊构造方法。对吧,构造器。还有constructor。啊,这几个单词说的都是一个东西啊,另外还有一个什么叫做构造什么呀,呃,叫做构造函数,我不知道大家有没有听说过啊。
13:04
其实方法又被称为什么又被称为函数?函数在C语言C加里面的函数吗?对吧,叫构造函数,各位啊,构造函数有的人你看不同的成全可能叫法不一样,有的叫构造函数啊,有的叫constructor啊,有的叫构造器啊,有的叫呃构造方法呀,有的人还叫构造子啊,构造子啊构造子,但是每个人叫法都不一样,但是我我我跟大家写出来这个最常见的这几个方式啊,但当然这里边最主要就是这个构造方法。啊,有的叫构造器吧,啊,这个是英语单词啊,叫or是构造,构造器,构造方法啊,或者叫构造函数啊构造函数它是一种特殊的,呃,构造方法啊,它是一种特殊的方法啊,它特殊在什么地方,不需要指定反馈值类型。啊,方法名还和类名怎么着啊,一模一样。啊,然后剩下的其实就和普通方法差不多了,但是你要注意构造方法的调用跟普通方法调用不一样,构造方法要想调用呢,你得使用new来去调。
14:06
你只能用new来调过的方法就只能用new,只能用new来调用。构造方法啊,你没有办法使用别的方式去调用啊,这是构造方法上面的一个规矩,另外要知道构造方法的作用啊,一可以创建对象,二给属性赋值啊,这就是他的职责,这就是构造方法的职责。另外再记住构造方法无参的你没有。对吧,没有写,我说这块啥也没写对吧,相当于有一个无仓过道啊,但你如果写上的话,是不是这个无仓过道就没了啊,你为了保证这个无参构造是有的,对吧?所以先建议大家把这个东西手动的写出来,这样的话它就不会丢了,你将来采用这种方式扭的时候比较方便嘛。是不是哎,比较方便一些啊,了解一下,所以这个东西呢,咱们还是该记啊,还是要记住啊,来再编译一下,这个应该是没问题的啊,好,没有任何语法问题。
15:03
行了,这个是构造方法呀,然后咱们再往下呢,好像讲了一个封装啊各位这个封装这块呢,是面向对象三大特征之一,先有封装,封装有了有继承,继承有了才有多肽啊,然后我们今天呢,上来的第一件事就是要把这个封装这块我们要给他讲完了啊,学完了,那封装为什么要封装啊,封装有什么好处啊,哎,封装有两个好处是不是,第一复杂的结构是不是不再对外暴露了,那对于使用者来说,可能只需要接触,哎,包装之后或者封装之后的一个什么呀,简单的啊,一些操作入口,是不是让我们的操作更简单,第二个就是让我们内部的数据什么呀更安全,其实这就是,哎,我们两个作用啊,保证内部结构的安全,屏蔽复杂,暴露简单啊暴露简单,那么这块呢,我们昨天好像是在这块啊,给大家写了写代码,但是呢,我们并没有完全实现我的封装啊,讲到关键的时候呢,呃,当时是下课了,是不是行了,那我们就简单回顾到这儿吧,啊这个回顾就简单说到这儿。
16:02
那另外我们昨天好像还布置了作业是不是啊,这个作业呢,大家呢,昨天晚上我看到12点多是吧?啊,我11点钟,我11点整,我我我困了,我就睡着了啊,然后到这个,我看这个有同学还是在23:40多40多分啊,有同学问我问题了啊,当时是睡着了啊不好意思,呃,大家呢,也估计也挺累的啊,挺累的,大家注意身体啊,多喝水啊,多喝水。多喝水啊,平时要注意营养啊,注意营养,又在这种环境下,大家这个呃又这么努力的去学习,我觉得这是这个呢,是怎么说呢,呃都不容易是不是,哎,那多注意一点好吧,多注意一点啊,然后那个呃多喝水啊,多喝水。嗯。别出门吧啊,别出门啊,尽量少出门啊,少出门估计现在也出不了门,大家都在家里啊呃,这个对14的这个作业呀,咱们现在就不再讲了啊,现在就不再讲了,我抽点时间就今天吧啊,今天晚一点看看能不能把这个作业题说一下好吧啊。
我来说两句