00:00
好了,我们得把作业给他处理一下啊,不,不去说这个作业肯定也是不行。那行接下来呢,我们在这儿来看一下啊,这个我先关了,各位关了之后呢,这边呢,我点右键啊,我新建一个叫什么呀,叫做DAY15的一个作业啊对15作业,那么带15作业这块呢,我们把这个DAY15作业呢打开。打开呢,咱们一个一个看啊来先看第一题。那第一题呢,我们点右键啊,我们新建什么呢?嗯,就直接TEST01吧。或者叫homework啊,HOMEWORK01。Homework。一。来这块呢,我们先把注释写过来,把题目先拿过来。然后在这里呢,我们写上一个什么呀,Public class啊,我们这个class叫homework。
01:02
一然后呢,Public static,我们把这个主方法写上。那来看一下啊,看一下。通过代码封装实现如下需求,编写一个类book。听话啊不?对吧,好,那接下来呢,代表什么呀?Book代表教材,具有属性,是名称。String title是不是,哎,这是一个名称,然后它还有一个页数。是不是,那这个页是用int就行了,是不是,哎叫page number。然后呢,其中一页数不能少于200页。那这个显然是要封装一下是不是,哎,那我们private呗,属性私有化吧。
02:03
是不是啊,属性私有化private,然后接下来呢,你可以在这里提供什么呀,构造方法,你可以提供一个无参构造啊雨松老师,我为什么提供构造方法,这是规矩啊,你就按照这种方式来就行了,构造方法,哎,无餐。无参数啊,有参数构造器,那么public book是不是接下来在这呢?我们可以给上什么呀?哎,比如说string类型的S1和int类型的I。下S吧,In I,那么接下来这块呢,Title是不是,哎,我们给它哎附上一个S,然后呢,Page number呢,我们给它附上一个什么呀?哎,好,这是我们的构造方法啊,然后呢。再往下是set盖方法,要提供的set and get方法啊,那你给他提供上,比如说这个title呢,这块你就给他提供一下呗,你固定写法呗,昨天咱们讲过set方法这样写set title是不是,哎,String s,接下来是title等于S呗,是不是,然后呢,Public防什么呀?哎,一个string呗,叫get title版get title是不是,哎,Return谁就行了,哎,这个title就可以了。
03:18
那么再往下呢,还有一个什么呀?叫I set什么呀?Page number是不是?哎,In类型的I,接下来这个page number属性附上一个I,那么接下来再来一个方法,返回int,叫做get page number呗,是不是?然后接下来return谁呀?哎,我们的一个page number就可以了,你先不要管其他的,把set的方法,Get的方法,Set方法,Get的方法先给它写出来,再接着看它的题,题目的要求啊,它不是封装吗?是不是封装,其实就是属性私有化,对外提供S的方法,你有两个属性,应该提供什么呀,四个方法。是不是,哎,Set get1对,SET1对,这个set get针对的是上面这个属性,你下边这个set针对是什么呀?我们这个属性啊,针对这个属性,这个是无参,这个是有参,你这样先写上,那继续他说什么呢?说其中一页数不能少于200页。
04:11
啊,不能少于200页,说的是这个吧。对吧,那就判断一下呗。判断一下E,如果I要是说小于200页了。那你这块的话就怎么做呀。那你就system.out呗,点print打印输出呗,你说这个,呃。本书页数不能少于200页。对吧,哎。Return结束。啊,Return结束。但是你在结束的时候啊,他说什么呢。他说。
05:00
否则输出错误信息,并赋予默认值200。就如果它是小于200的情况下,就默认给它一个值。对吧,本书页数不能少于200页。啊。默认赋值吧,默认赋值200啊,这样说呗,是不是,那这边的话你就写上默认赋值200。对吧,那这个时候呢,我们这边就直接是page number等于200呗。程序就结束了,如果程序能到这儿的话,哎,说明什么呀,说明页数是大于什么200的,你想想是不是大于大于等于吧,只能说大于等于啊,200的。大A等于200,那就直接附上去就行了。但是呢,你看一看啊,你光这一块你有一个拦截你的构造方法,其实这块也可以拦截一下。也可以拦截一下。
06:00
是不是哎,也可以拦截一下,你这这边你你这边你调这个各种方法,它也可也会传一个页数过来啊,所以你判断一下,如果I呢,要是怎么着啊,小于多少啊。200是不是,哎,那这边呢,你就给这个page number干啥呀。附上一个值呗。对不对,哎,给培训那边放一个什么200呗。然后你说句话。对吧?啊,你其实也可以不说出一句话。也可以啊,或者输出一句话也可以啊c.out点打印输出你输入什么呀,就是说呃,叫做页数不能少于200。少于200时。页数默认为200页。那这个时候呢,加个else呗。如果大于等于200,那你就附上值不就行了吗?对吧?哎,代码你看这样写。对不对,这样的话,这个有参数的构造方法不也就得到了控制吗?是不是,哎,这在这里你可以这样去控制它啊,控制它,然后这边呢,你采用这种方式控制它都可以啊,为各属性提供赋值和取值方法。
07:09
具具有方法detail啊,用来在控制台输出每本儿教材的名称和页数。那么也就是实际上他要求你在这里除了属性,除了构造方法,除了这个set get方法之外,他要求你额外再提供一些具体方法啊,对,额外啊,再提供。一个detail方法,Public void detail是不是?然后直接就system.out点打印输出就行了。对吧。那这块呢,你可以输入什么呀,它要求输入什么呀。输出每本儿教材的名称和。页数呗。是不是啊?名称教材名称是什么,对不对,你就直接在这里。
08:02
抬头吧。是不是哎,总页数喂,多少页啊。对吧,哎,所以这个时候这个题目啊到这儿。哎,就差不多了。编写测试程序进行测试,为book的属性赋予初始值。并调用book对象的低碳方法,看看输出是否正确。那么这个时候呢,我们就可以测试一下,我们就创建什么呀,哎,Book对象,那book对象可以创建一下book。是不是啊,那么。接下来呢,我们,嗯。比如说B1吧,你有一个book。你调无参构造可能还是有点问题啊,调无参构造方法可能还是有点问题啊。我们调有参数的构造方法,传一个title,传一个页数行吧?
09:01
比如说。高三或者说是。高三数学人教版。啊,然后呢,再往后呢,页数假如说是。250页。调用什么呀?Detail方法是不是b1.detail。我们来看一下这个程序啊,现在是否可以正常。对幺五吧作业啊,Java c形成Java编译。编译之后呢,Java去运行HOMEWORK1走。教材名称,高三数学人教版总页数为250。对吧,没问题,那么接下来呢,我修改什么呀页数。修改页数B一点什么呀?Set什么呀,Page number。页数呢,给它修改成什么呀,100修改成100之后呢,我再去调B一点什么呀,Detail应该是现在是200页才对啊,因为你附上100之后,大家想一想,是不是这块呢,就满足了这个条件,然后附上去一个200,你现在这个页数是不是就变成200了。
10:17
对吧,哎,变成200了。来,那现在呢,我们在这里啊,再去编译,再去运行。你看教材名称。对吧,哎,上来是250,然后紧接着赋值的时候,本书教材页数不能少于200页,默认复值200对吧?哎,教材名称是这个,然后总页数是200啊,总页数是200。没问题吧,哎,没问题,那么接下来我们继续再往下啊。那。一个什么呀,Book。盗墓笔记,这这不是教材是吧,这不是教材,就这着了啊盗墓笔记啊,然后这块呢,有也。
11:04
别这么写了,直接这样吧。直接给一个无参构造啊,第2DETAIL会有什么问题啊,我们来看一下啊。Java c的去编译,Java去运行。教材名称是nu,总页数为零。是不是所以呢这块呢,其实怎么做,你可以这样做。有两种方案,一种方案是什么呢?是把这个无三过道给他屏蔽掉,不允许。不允许。对吧,那你这样的话,你编译就过不去了,它就不能通过无参数构造方法去调了,你看。对吧,这编译报错了,它不能这样调。这是一种解决方案,还有一种解决方案是什么呢?你可以考虑在这给他调无参构造的时候,你可给他附一个默认默认值,你比如title啊,你随便想呗,对吧?啊,你说教材名称未知。或者直接未知就行了,对吧,你配置number给一个默认值等于多少200是不是你调无参构造呗。
12:04
调无参构造教材名字不知道对吧,然后页数呢,给他200,虽然这个题目当中没有这么要求,你可以这样去做嘛,你的思路要灵活,你的思路不要只是仅限于这个作业上啊,你可以去考虑一下啊,来Java c呢,我们再去编译Java,去运行HOMEWORK1中。教材名称未知,总页数为200。调无参构造就是这样的。对吧,你要调有参数的构造方法,就是另外一种情况了。啊,另外一种情况。下面的有些方法用得着,有些方法用不着,但是呢,你这个set方法和get方法,Set方法,还有这个get方法是必须要写上去的,因为这是封装所必须的属性私有化,对外提供分别的set get方法啊。下边这个detail方法主要是用来获取我们教材名称以及总页数的,那么现在大家思考一个问题啊,这个detail方法能不能加static?好,现在大家思考一下,现在思考一下这个问题,能不能加static。
13:13
不行,为什么不行啊?为什么不行啊,又回到我们昨天那个问题上了,为什么这个地方不能加磁带。原因是加上static之后,是不是将来会采用类名去调这个方法?如果是static,将来你这个代码肯定是这样的,不点什么。点什么呀?Detail是不是?那大家想一想,Detail是明细对吧?是显示出这一本书的明细,这本书的名字叫啥?这本书的总页数是多少?每一本书的名字不一样,总页数也不一样,它是一个什么行为啊?Detail这个行为是个什么行为?显然是一个对象行为,对不对?
14:04
你肯定得有对象,是不是才能调这个方法呀,因为每一本书的结果都不一样啊。所以这个方法你不能用static,用static你用book去调就代表没有对象,你没有一个对象,你去调detail干啥呀?是不是,哎,所以这块呢,咱们就得把给它去掉。或者说大家是否还记得我昨天所讲的东西,假如说你这加一个static,那大家分析一下title是一个什么变量,各位title前面有没有static static。Title前面没有static,这说明啥?说明这个title是一个什么变量啊,各位再来一遍,什么变量,实例变量对不对?哎,实例变量怎么访问呀,得先用对象是不是才能访问呀?哎,所以说访问实例变量是不是引用点啊。引用点的方式吧,访问对不对,哎,引用点的方式访问,那么这个时候呢,我们title呢,前面肯定是有一个什么呀,叫做引用点是不是。
15:03
哎,那这个引用点是谁呀?只能是this,对不对?我们昨天是不是讲到this啊,哎,只能是this。This title。那你反过来说,你这个大括号里边,大家想一想,是不是你这个方法带着static就没法用this啊。这样就矛盾了,所以你这个呢,给它去掉。去掉之后呢,你就是一个实例方法了,实例方法那肯定是在外部啊,先把book对象怎么着先扭出来,扭完之后用B去调detail方法。当我B去调调这个低碳方法的话,这个this就是B,我我昨天讲没讲这个东西,各位假如你在new了一个book对象是吧,那接下来我调用B的一个低态啊,那这个this是不是就是B呀。如果我在这里呢,我调了一下什么呢,现在B1这一块,我调一下它的低胎啊,大家思考一下是不是B,如果去调这个方法的话,这个this说的就是be啊。
16:10
所以这个其实就是当前对象对吗。你B1。去执行detail的话,当前对象就是B1呗。你如果B去调detail的话,你当前对象不就是B吗?是不是,哎,你说比如说张三点shopping购物。那你张三去购物的话,你这个this代表不就是张三吗?如果你李四去shopping购物的话,大家想一想,是不是这个this就指当前,This指的就是李四啊?所以这个this用在实例方法当中。表示当前对象吗?对不对,当前对象有同学老师,这怎么B和B1又变成对象了,我说一下各位啊,B和B1严格意义上来说。
17:02
它是不是引用,是不是变量里边是不是保存内存地址指向那个对象啊。对吧,哎,我们通常说他是对象啊,他是对象。但是我说一下啊,其实也没有那么严格的。较真啊,我就把B说成对象了,我就把B1说成对象了,行不行,就是我们以后聊天,我们把B说成对象,把B1说成对象行不行,各位。这样行吗?其实也没什么。那我一直在说引用引用引用其实这个东西。怎么说呢,严格上它叫引用,当我们粗略的来讲,我们俩之间在聊天的时候,我们不妨也可以怎么着啊,把B叫做一个对象,把be呢叫做一个对象。是不是也可以这样去叫,但是呢,这样不专业,不是那么专业,但问题也不大,也不大,因为B你毕竟保存内存地址指向的一个对象嘛,你B1毕竟也是保存内存,内存地址指向那个对象嘛,对吧,所以这个B呢去调DT,那this就是谁呀,B呗,如果你B1去调低,那你this就是谁呀,就是B1呗。
18:09
对吧,所以你这个方法在这里是不能加static的,你加上static之后呢,这里就没有this了。明白吧,啊,没有这意思了。没有了。那有的老师我这样呗,我把这个title这加一个static呗,好,那我现在再问大家一个问题啊,我问大家问题。呃,这个能不能加。每本书的。名字。是不是都不一样?你加上static。不行吧?这个特征是一个什么特征?是对象的特征,还是属于整个族的整个类的一个特征?这个title是不是应该属于我们对象的一个特征啊。
19:01
所以这块你就不能加staic卡。啊,你不能加static。你不能加static,那你这个变量就是实例变量,你实例变量访问的时候就只能这样做,用实例方法。这就是昨天我在讲课过程当中,我说过一句话叫什么呀?如果你方法体里边访问,直接去访问实例变量。那么你这个方法得是实例方法,你不能用静态方法。你用静态方法就访问不了了。啊,如果你加了这个staic,那肯定就表示你是一个静态的变量,那你这个方法就可以静态没有任何问题。你这个方法静态就行了,没问题啊,静态方法里边可以直接访问我们的静态变量,没有任何问题。但是如果说你要把sta去掉,对吧?哎,那你这块呢,你这个sta就不能加。不能。
20:00
啊,这个事儿你好好再想一想。我们不可能在前面加static,怎么可能呢?每一本书的这个这个这个叫什么名称能一样吗?不能一样啊是不是,哎不能一样,所以说我们这块呢,就不能加static,就导致你这个方法得是一个什么呀,实例方法呗。实例方法只能是一个实例方法,那实例方法里边是有this的,你直接访问title,实际上是访问的this的title,你访问这个page number,其实是的page number,明白吧,哎,你Java c呢,去编译一下Java去运行你看。对吧,哎,没问题吧,但this点是可以省略的呀,昨天讲过this点是可以怎么着啊省略的,所以这个时候呢,代码你就可以这样写,你this点给他省了呗。对吧,This点省了呗,是不是,哎,你再看这个程序Java c编译Java再去运行。对吧,哎,就是这样的啊。
我来说两句