00:00
行吧,那咱们继续再往下吧,各位啊,这个this还没有说完,这个this这块啊,还有一些别的东西我们继续看。继续看啊,大家注意听课。来,This test04。那么这个我们来说一下谁呢?This,除了可以使用在哪呀实例方法中啊,还可以用在哪儿呀?啊,用在构造方法中。啊,构造方法中。具体怎么用,我给大家举个例子啊,举个例子。来比如说呢,我们在这里呢,我们先写个测试类啊,这个测试类呢,我们叫this test04呗,好了,那这样的话,Main方法我们先写一个publican void men。
01:03
在这里呢,我们定义一个日期类。我我我先提出个需求吧,好吧,提出个需求啊。需求第一,定义一个日期类,可以表示年月日信息啊,这是第一条。第二条是什么呢?规定啊,需求中要求什么呢?如果调用无参数构造方法,默认创建的日期为。1970年1月1日。他有这样一个要求啊,如果调用无参数误导方法,默认创建的日期为1970年1月1日。啊,1970年1月1日。当然除了调用什么呀无参数构造方法之外,也可以调用什么呀有参数的构造方法来创建日期对象。
02:11
那针对这样一个题目的话,大家这个代码应该怎么写呀?定一个日期类可以表示年月日的信息,年月日的信息需求中要求如果调用无参数构造方法,默认创建的日期是1970年1月1日,当然除了调用无参数构造方法之外,也可以调用有参数的构造方法来创建日期对象,那根据这个题目的一个要求,我们应该是知道什么呀?应该是知道我们这个程序怎么了,提供至少两个构造方法对不对,哎,提供两个构造方法,来我们写一下啊class。那我们应该是有什么呀,年月日信息对不对,年然后月,然后是日,那年的话应该是year,各位啊,以后都是要封装啊,以后写代码都要封装。
03:01
养成好习惯啊,以后写代码都要封装啊,以后写代码都要封装啊,属性私有化,对外提供center and get啊,封装你就这么写就行了啊,Private。然后呢,年月日好,那么接下来我们要提供什么呀?构造方法对不对,那无参的和有参的是不是啊。构造方法无参,构造方法有参,那么再往下呢,就是set and get呗,是不是,哎,就是set方法和get方法,那因为有三个这样的属性,我们要提供什么呀?提供三个,提供六个吧,是不是?哎,提供六个啊,我们写一下,你看在写这个代码的时候是不是没有任何技术含量啊,所以你以后用集成开发工具的话,像这个set方法是可以一键生成的,八一键生成就行了,根本不用你写啊。
04:03
来set year,然后这怎么写this year year是不是来public,返回一个t get year啊,你多敲敲,多练练指法呗,Return一个year是不是好,再来一个public about that,然后接下来我们参数类型用什么呀,In类型的math,然后我们接下来在这写怎么怎么写this month是不是,哎,Math month。然后呢,再来一个public的that month,然后接下来我们return什么呀,一个month,然后再往下的是public voice that Saturday是不是,然后呢,参数我们给一个什么呀,叫int类型的day,然后给一个this day day是不是好,那么接下来我们再来一个叫做返回int get day啊然后我们这块呢,我们就return一个什么呀,Day就行了啊,那么图老师我们要不要在这做关卡呀?要不要在这设立关卡?你看你有没有时间啊,有时间可以设立关卡啊,有时间可以啊,有时间可以设立关卡啊,没问题,你自己设立啊,哎,这块也是一样的,这个赛的方法也是一样的啊,自己定啊,这个我在这呢就不写了,按说你的set的方法应该是有安全设立关卡的啊,设定有关卡这个就更安全了嘛,是不是?哎,这是S的方法,Get的方法赛的方法get的方法赛的方法get的方法啊盖的一共是六个方法。
05:25
那么这个属性私有化对外提供三个方法,这其实就是封装啊,封装完了。那么封装完之后,我们的需求是干什么呢?我们的需求是?嗯,调用无参数构造方法默认创建的日期是1970年1月1日,那么也就是如果在这里调用无参构造的话。那么这个无参构造创建的这个日期默认值是1970对吧,是不是1月1日呗。This day是不是这样写呀?
06:02
对吧,哎,这不年嘛,这不月嘛,这是日吗?这调无参构造默认创建,你看这句话的意思,调用无参构造默认创建日期是1917年的一月日,也就是说你要调无参构造方法,默认创建日期就是固定的。是不是,哎,就是说调用无参数构造方法啊,初始化的日期是固定值。你只要调这个对吧,你说老师我也不写呢,你要啥也不写,这个就是零,这个就是零,这个就是零,如果你这样的话,调无三过道获得的是零年零月零日嘛,但是题目的要求是调用无参数过道方法,默认出的日期是1970年1月1日,所以这个时候你是不是在这儿,哎,给它附上去,1970年1月1日啊,啊,给它附上去啊,那么有参数的构造方法,我们也可以给它提供一下,比如date是不是,哎,In年in月in日,接下来我们this.year year this.month month是不是this.day day是不是好,那这个代码呢,无参的有了,有餐的也有了,是不是,哎,那现在呢,我们这个提问的一个需求我们就完成了啊,就完成了有些学老师你在讲什么我还不知道,你在讲什么?我说呀,This除了可以用在实例方法中,还可以用在什么呀?构造方法里边是干什么用的呢?
07:22
哎,干什么用的?好,各位看好了啊。嗯。我首先啊,我测试一下我这个代码,看能不能正常运行,好吧,我在这里提供一个方法啊,可以打印日期的方法啊,提供一个可以打印日期的方法。比如说我们叫detail吧。行吧,就叫detail啊,点out点打印,我们输入什么呀,叫做嗯,年是不是月啊,然后再来一个。
08:02
年月日是吧,哎,年。月日啊,我给我给这么一个detail方法,然后我把这个对象我就溜出来一个啊,来调用无参数构造方法。怎么调啊?对吧,你一个什么呀?哎,Date第一点什么呀,Detail是不是,哎,Date第二你一个什么呀,哎,Date。可以省没问题啊,但是习惯了习惯了啊,这个这点是可以省的,但习惯了啊,来第二点什么呀,Detail啊。对,Detail里边省略了this。就你这么写行没问题啊,你这块你写什么呀,This点也行啊,This点也行。这点也行,我可以这么说,各位啊,你都可以这么干。
09:00
对吧,你调别的方法行不行啊。你这个位置调别的方法行吗?就你这调get方法行吗?Get?钙的方法行吗?这get的方法是不是也是反馈啊,可以吧,哎,没问题啊,行,我这里就不再调方法了,各位啊,再调方法了好了,那么这个可以省也可以加上,无所谓啊,可以省也可以加上,但这块确实可以省略啊,可以省略。对吧,没问题啊,这可以省略,你带着呗,带着也行啊,这点可以省,我写上吧,This点可以省啊,这点可以省略。不写了,没有意义啊,写它干啥呀,自己知道就行啊来,那咱们这个呢就来嗯,看一看啊,这边指定比如说2000年2008吧,2008。好习惯是带上对。8月8日啊,奥运会是不是北京奥运会啊,来Java c呢,去编译this test04.java然后Java去运行this test04走。
10:11
好,大家看这个程序是没有任何问题的,对不对,1970年1月1日,2008年8月8日是不是,哎,因为你拗出来之后,无参的应该是创建的这个对象,如果说你调调的是有参数的,你走的是这个构造方法,是不是你这个的话就是1970年1月1日这个的话就是2008年8月8日呗。是不是第1DETAIL和第2.detail啊,是这样的,调无参,这个是调有参,调用有参数构造方法,好,这个程序没有任何问题啊,那么接下来呢,我问大家一个问题啊,这个代码和这个代码是不是重复了。大家思考一个问题,在这个无参的构造方法里边。还有这个有参数的构造范围里,你看这个代码长得像不像,你看this year this month this day,这又来个this year this month this day。这个代码好像是重复了呀。
11:03
是吧?这个代码重复了。嗯。那代码重复怎么办呢?我能不能在这个过段方法里面去调这个构段方法呢?哎,所以这就是我要讲的各位。啊,This,除了可以使用在实例方法中,还可以用在构造方法里边。第二个。新语法,新语法,各位啊,新语法通过当前的构造方法。去调用什么另一个本类的构造方法。可以使用以下语法格式,This括弧,然后跟实际参数列表。
12:01
注意啊,就是你这个这三行代码和这三行代码实际上啊。是怎么说呢,一样,所以你就没必要在这里重复的代码重复敲了,你可以让你这个构造方法去调另外一个构造方法怎么调。来this,你看调这个构造方法是不需要传三个参数啊,一个是年,一个是月,一个是日,都是int类型吧,所以我能不能这次括弧写上去,第一个是啥1970嘛,第二个是1月1日是不是,那这样的话就表示我通过这个构造方法去调你另外一个构造方法。那这样的话,以后我这三行代码就不用写了,我直接写这一行就够了。所以this括号的这种语法是用来通过一个构造方法去调另外一个构造方法的,各位啊。记住了吗?这个语法是用来通过一个构造方法去调用当前类的另一个构造方法。
13:00
是用这次括号啊,通过当前的构造方法去调用另一个本类的构造方法。可以使用以下语法格式。这个Z是括号,语法Z括号。这个语法作用是什么?啥呀?四个字啊,叫代码复用。其实我问大家一个问题,不学这个this括号行不行?就算我没学会,我不会他行不行?没问题,不会他你可能以后写代码写的稍微多一点。你要会他无非可能就是说,哎,你这堆代码不用写了。我直接呢去调就可以了,这样的话代码可以得到复用。就你这边不是有一个代码吗。对吧,那我让你这三行代码执行呗,我怎么去调你这个构造方法呀,我通过一个本类的这个构造方法去调你另外一个构造方法,我通过this括号的这种语法就可以调你这个构造方法有三个参数,那我就传三个参数呗,你需要int int int,那我就传三个int呗。
14:08
是吧,哎,这样就可以调用了。那么这块呢,我们来编译一下,各位编译去运行。是吧,197年1月1日,206年8月8日还是一样的,我把它改一改1977年吧,假如说改完之后,接下来Java c编译Java再运行,大家看是不是就1977年1月1日啊,是不是,所以这个程序现在是生效的啊,1970年1月1日啊,编译去运行,你看就是1970年哎,1月1日嘛。对不对?哎,这个语法还是非常非常的有意思啊,非常有意思,它在哪呢?在构造方法里边,它的语法机制是什么?是this括号里边跟的是实际参数列表,通过哎一个构造方法去调用另一个构造方法。啊,就是这叫什么呀,通过一个构造方法A去调用。
15:01
通过一个构造方法一去调用,去调用构造方法二。啊,可以做到代码复用。啊,但需要注意的是构造方法一和构造方法二都是在。同一个类当中。注意啊,这个构造方法一和构造方法二都是在同一个类当中,你不能说我现在在这儿有个类,这里边有个构造方法,构造方法八去调,你另外这个类的构造法这个做不到啊,这个Z括号呢,只能是说我当前的构造方法去调用我本类的其他的构造方法代码可以得到复用。啊,所以这样的话,我们用this括号的这种语法就可以了啊,传参数传参数传参数对吧,代码就得到复用,这个代码就不用写了,就不用写了啊就这意思。
16:01
那么另外还有一点啊,需要大家注意的这个死记硬背就行了。这个解释不了啊,死记硬背,This括号只能出现在构造方第一行。并且只能出现一行。This括号啊,这种语法只能出现在一个构造方法的第一行的位置上。第二行就不好使,你比如说你这块呢,你加了一行代码。对吧,那么你在编译的时候,你就会发现怎么着啊,哎,有问题,你看第50行错误对this的调用必须是构造其中第一个语句。这个是需要注意的。啊,需要注意的,所以这块呢出现错误了,对this的调用必须是构造器中的第一个语句,就是说这个语句上面不能有东西。那么既然不能有东西,大家想想是不是不能出现两次啊,你如果出现两次的话,是不是代表这个语句上面有东西啊。
17:01
所以就矛盾了各位啊,所以说this括号在一个构造方法里边只能写一行,并且必须出现在首行啊,它是挺特别的,这个没法解释啊,也解释不了啊,解释不了啊,死记硬背就行了啊,就是对于什么呀,对于this括号的调用只能出现在构造方法的第一行。啊,这个死记硬背就妥了啊,就妥了。行了,那这个呢,是关于咱们的这个。嗯,这个this这块的一个东西啊,This这块的东西。行,再想想这块,看看有没有不理解的地方,要无参构造,无参构造这边实际上呢,它怎么着啊,哎,可以这样写,节省代码嘛,是不是这是括号的形式,但是这个呢,只能出现在构造方法的第一行。啊,它比较特殊啊,它的作用其实就是代码重复使用,如果没有这种语法,我再强调一下,其实也不耽误你做Java开发,无非就是说你在这里需要再把再把代码再写一遍,再把代码写一遍,就这意思啊,就这意思。
18:12
这个使用的还是很多的。这个用的还是很多的啊,这个我可以给你翻一下源代码C盘。Java jdk。然后library s RC Java base Java,然后找找YouTube吧,找一个类叫。A release在下边啊,就这个。随便打开一个看看有没有有没有this括号的这个这个语法。还还没有。我看看啊,这个类里边有没有。呃,这个类当中看看构造方法啊,这这几个构造方,这是个构造方法吧。是不是这是也是的吧。
19:01
对吧,哎,无参构造,然后这是有参数的。嗯,这边没有。这里边没有的话,看看那个哈西赛有没有啊,我印象当中应该是有的啊。Sight。里边有没有this括号的这个语法,哎呀。现在这个新版本都没了,好像是。嗯,来咱们怎么找也不好找了,以前老版本是肯定有的啊,因为我一找找就是有的啊,这个新版本里面它没有出现这个this括号,是不是来看这块啊。看看有没有这括号。好,大家看这里是不是有一个这个哈希map这个集合在new的时候是吧,这是个集合啊,后期你就就就知道了,这块你看有个this吧。是不是这这这这是括弧吧,这是这是什么呀?这是通过这个构造方法,是不是就调用另外一个构造方法呀。对吧,那如果说你看它调用谁,调的是有几个参数啊,两个参数的是不是一个参数是int类型,还有个参数是默认加载因子是不是啊,就相当于你通过调用这个构造方法的时候,他会去调你这个构造方法,而你这个构造方法是谁呢?你可以找找。
20:14
应该就是他喽。对不对,你想想,你看咱们这个代码可能看不懂,没关系啊,但是呢,这些程序你你捋一捋啊,你假如说有两个构造方法,那就意味着我是不是可以去调你这个构造方法,我也可以去调你这个构造方法,对吗?那如果说我调你这个构造方法的话,它底层实际上调的是谁,还是上面这个构造方法。只不过,只不过在这块有一个默认的一个因子吧。这个默认因子单词都是大写,并且每个单词用下划线进行分割。你一看这个名字就知道它应该是个常量,对不对。所以呢,你往上走,你看看这个默认加载因子。它是不是0.75是一个数字常量,你看。你可能看不太懂了,是不是啊0.75,那也就是说实际上啊,刚才呢,在这儿呢。
21:04
找到这个this括弧。实际上这块你要调这个构造方法的话,就相当于假如说你初始化容量给他传过来100。那这个值就是多少啊,100这个值默认就是多少啊,零点什么呀,0.75。啊,那你通过这个构造方去调另外一个构造方,这个构造方法实际上走的就是它。而你这个里边的代码是不是从头到尾又走一遍。对吧,哎,又走一遍,那如果说你要是没有这个这次括号的语法的话,大家想想是不是需要把这个代码从这再复制一份拿过来放到这儿再再写一遍呀。对吧,哎,你可能需要怎么着啊,你可能需要在这个,哎,再写一遍这个代码,为了让这个代码哎少写,所以。我们一般呢,是在这调什么呀,This吗?是不是哎,This啊。大写,比较难看。全是English。啊,怎么说呢,各位你不要看这些注释啊,你看这些东西干啥呀,这里边儿的单词还好啦。
22:07
还好啊。不是想象的那么那么崩溃啊,因为这些单词以后我会都让大家接触一下啊,你不能说你。这些单词我都会对吧,这些单词我都理解,那你这个也也也也不太现实啊,因为我毕竟不是,呃,不是这个专业的一个英语出身,是不是啊。这个这个呢,没啥啊,各位,主要是让大家看看这个this括号的这种语法,它有它的魅力啊,它的魅力是什么?就是我们代码可以复用。这对代码我们就不用再写了。对吧,啊,当然针针对当前这个程序来说,大家看即使写上是不是也就三行对吧,我在这儿呢,就是给大家举个例子啊,有的时候这个构造方法可能几百行。几百行代码,如果这几百行代码你在这儿用一个Z括号的,你就会感觉很爽,明白吗?啊就会很爽,你说你这个几百行,这里八再写几百行代码都重复了,代码写的很冗余,那你的语法就不太好嘛,所以它要出现的这种语法就是这括号的这种语法,比如通过构造方法去调用另一个构造方法,但这个构造方法和这个构造法必须是同一个类的啊,同一个类中的构造方法,并且这个语句只能调一次,而且还只能出现在构造方法的第一行,连第二行你都没机会啊,没机会好这个this呢,我们就啊说完了各位啊,说完了行,大家先休息一下吧。
23:25
休息十分钟。
我来说两句