00:01
那么我们还是老规矩,在讲课之前呢,我们做两件事情,第一件事情,我们把上一次课的作业做一个点评,然后呢,把上次课的讲解的内容咱们做一个回顾。好,首先呢,我们打开上一次给大家布置的这一个作业题。打开大。OK,好,我们来看一下上一次给他布置的这么四个题,那么我们来看第一个题,他说编写一个time类,对time类,然后加入只读属性,那如果是只读属性的话呢,呃,那这个地方我们就需要用V来进行修饰,对吧?然后呢,他说有个二和minutes,就是小时和这个分钟。然后呢,再编写一个检查某一个时刻是否早于另一个时刻的方法,那就说写一个方法,这个方法呢,人家已经给你定好了,叫什么名字呢?叫before,然后里面有个other time,它传进去的这个类型呢,也是time类型。
01:09
而且别人也说了,他说对象,他对象应该以这种方式来构建,那就说明我们这里至少要提供这么一个呃,构造器,那这个构造器呢,可以以主构造器的方式给,也可以以辅助构造器的方式给,那大家看我写的代码非常的简单啊,所以这个这个程序其实很简单,这里面是个构造器。啊,构造器呢,接收它传入的小时和分钟,然后这两个呢,是我们的属性,诶这两个是我们的属性。对不对,是属性,这个也是属性。没问题,那紧接着呢,我这里写了这个方法,这个方法就是他要求的方法,对吧,那个方法呢,呃,这个签名,这个方法的签名呢,就是按照他写的,然后后面呢,我用的是类型推导,那这里面这个语句用了一个多分制来判断,怎么判断的呢?诶同学们可以看到如果这里面是如果当前的啊,如果这个当前的。
02:20
这个小时,数小时。小时数。啊,这个数小于小于other的这个小时数,那就意味着我确实比你早,你比如说那前提我们是按24小时来做啊同学们。就是前提我是以24小时来来设计的啊,以什么呢,24小时制。啊,小十字来玩的。那如果说我这个小时数小于你给的这个,你传入的这个time对象的小时数,那肯定我就比你早了。那么另外一个呢,反过来就是,如果我当前的小时数大于R,诶大于你这个R,那说明什么呢?那说明诶我就没有你早,你比如说你比如说我传的是一个十十点十一分,你是呢,你是什么呢?你是09:10,那我显然比你有我就没有没有你早了。
03:21
另外一个情况呢,就是这样子的,就这两个小时数是相等的,小时数相等,那小时数相等的话呢,就意味着这里面有呃有两个逻辑了,第一种逻辑就要看,就要判断什么呢?就要判断分数,判断这个分钟,哎判断这个分钟,那这判断分钟呢,我做了一个,呃,这里面又做了一个嵌套的分支。怎么做的呢?就说如果我当前的这个分钟小于你的这个分钟啊,小于,那就意味着我还是比你早,否则的话呢,就两个逻辑了,就是我比你大,或者是我跟你相等,那不管是我比你大,我的这个当前的分钟比你大,还是我的分钟比你跟你相同,那么都意味着我没有你早,嗯,比如说大家都是10:11,那那也不能说我比你早啊。
04:15
所以所以这这两个逻辑就放在一起了,大家看清楚了啊,那就L什嘛,就是就是我没有逆转,比如我传的是10:10,你传的也是10:10,那大家都相等,那我还是没你找,所以说这个代码呢,就写完了,非常的简单啊,来朋友们我们玩一把。呃,代码都是特别简单的,那我在这里呢,写上一个什么呀,包包啊,咱们写一个包包叫homework,对homeworker,那么我在这里呢,给大家写第一个小练习。的代码。对,Exerc exercise exerc,零幺,对零幺,然后呢,我在这里写个object,那么我们进进行一个简单的测试。
05:05
进行一个简单测试,来写一个主方法,然后呢,把这个类写到这里,简单的格式化一下。简单的格式化一下。哦。好,然后呢,我们来做一个测试吧,测试一下好,首先呢,我我先定义一个当前的啊,同学们写个当前的,我留一个time,那这个time它需要传入两个参数,那我就随便写一个吧,比如说十点,呃,十分。10:10,那么我再写一个other other6,一个time对象实例,那么这个呢?假设是十点,比如10:20。10:20,现在呢,我进行一个比较哈,Current点什么呢?它的这一个before传入我们的other。那此时此刻同学们,此时此刻,嗯,我是10:10,你是10:20,当然我应该返回一个处,对不对?好,那么我们看看它能不能返回一个处呢?我们运行一把,我们走一个,我们可以看到这里呢,就返回了一个,稍等第一次有一点慢。
06:22
第一次有一点慢,好我们可以看到是返回一个处,那现在呢,我把这个时间稍微的改一改,比如说我这里写的是二幺,那显然我就没有你早了,我是10:21,你是10:20,那我应该返回一个false。哎,我应该返回一个false,就说我没有你找。对,那如果说两个时间都相等,那还是没有逆着,仍然会返回一个处。好的,所以说这个地方的代码就完成了他的需求啊,好,这地方就是这个结果结果啊,结果根据根据输入的,输入的对象不同而定,对不对。
07:07
好,非常简单,第一个题咱们就讲完了啊,非常简单啊,这里面代码呢,没有任何的难度,只要咱们Java,学过Java的同学,对这个来说都是小小case啊,都是小case。好,现在呢?我们紧接着继续来看下一个案例。下一个案例,呃,是什么呢?是让我们编写一个student类。就编一个学生类,加入可读写的Java并,就是Java Java并的这个这个呃,就是Java并属性name,而且类型呢叫string,还有一个ID,它的类型叫nu。那么他他问有哪些方法被。呃,会被产生,同时呢,要求我们用一个叫Java p的这么一个指令来查看到底有多少方法产生,你可以这写了啊,你可以在SC中调用Java bean的get和set方法吗?好,这个题呢,也是异常的简单,来我们看一下,首先同学们要注意怎么去理解叫Java病这个概念,Java病我们都知道,Java病注意。
08:17
它的最重要的属性就是set什么什么方法,Get什么什么方法嘛,就一个get一个set,对不对?好,我们来来玩一把,来吧同学们,嗯,读写属性也要告诉你了啊,是可读写的,来,咱们写一个小案例吧。那小丽来验证一下。Ex exerc02是不是那新建一个object?新建一个object,诶,为什么隔壁一点声音都没有。他们不上课吗?哎,为什么?是,一点声音都没有。他们还没上课啊,他他们没上课,好他们没上课,我们上课啊,好,那我们写就感觉很很亲近,知道吗?感觉是不是,是不是只有我一个人在讲课似的啊,好来吧,我们是读写啊,读写属性,读写属性人家已经给你写的很清楚了,对不对,是一个呢叫做name,一个叫ID,那类型呢,人家已经给写清楚了,好来吧,可读写的,那我们首先写一个name。
09:25
对,类型是实证类型,可以给一个默认值,没毛病啊,第二个呢,人家说的是叫做I did类型呢,你也给好了,叫浪类型,也没问题,也没问题,好这个呢,我们先把它整好整好好,然后别人说了啊,要要让我们给他这一个,呃,加入可读写的Java病史属性,那最简单的方式呢,就是我们前面学的这个注解加一个并。并property对不对,好用这个呢,就特别简单,不需要我们再写了,那么我们这引入一下,诶我们引入一下这个包。
10:05
哎,这个地方这个包是怎么引的,还有印象吗?Inport什么干了点什么beans点是吧,一下就全部引进去就完事了啊就完事了。好,键盘哪里位写错了?啊,这这他他把我给那个弄掉了哈,好这个就写完了,再把这个写进去完事。那么现在人家的要求是什么呢?同学们,别人的要求是这样子的啊,各位同学,人家的要求是,呃,要我们用Java批这个指令来查看你这个,你这个有哪些方法没产生,那么这个指令是干什么的,我先做一个简单解释,好同学们,这个指令它可以对啊,该指令。该指令是可以可以查看什么呢?一个点class文件的,它的这个反编译,哎,反编译反编译的反。
11:06
编译。的这个方法声明,甚至他可以呃,看到我们的返汇编的代码啊,甚至可以看到啊,我待会我们啊,甚至啊还可以还可以看到反编那个反汇编的代码,反汇编。反汇编的代码。好,那么我们来,我们来lawyer吧,呃,这个简单了解一下就行了,那么我们来lawyer好,打开我们刚才的这个东西,我们来运行一下,那这样子啊,我做一个简单动作,我直接。用这个show。那现在呢,我我跟同学们来用这个指令玩一把CMD。走好,同学们,此时此刻啊,在这个目录下边,在这个目录下面呢,就有刚才我们写的X202,那现在呢,首先我要对它一个编译,我要对它一个编译,那编译呢,同学们都知道是用scanner scanner c对不对,然后exe我们用零二。
12:09
点scanner。好,我编译一下,那么我编译完了过后呢,我们D我们发现诶生成了一个文件夹,在这个文件夹里边才有我们对应的class文件,是不是因为你打包了,因为你打包了这样子呢,让我们看起来不太方便,看起来嘛,所以说我这里偷个懒啊,我直接把这个包注销。我让这个反编译过后的student class文件呢,就在我当前这个目录下,我就好找了,好,我做了一个小小的改进,就是为了方便啊,为了方便来我们继续再重新编一下,那么当我们这样在编网络功能,我们就在当前目录看到有一个class点26点点class,现在我们用Java p这个指令来玩一把。好,首先我们用Java student轴回车,好,同学们可以看到,用这个指令我们就看到了当前的这一个Java,它在底层生成了一系列的方法。
13:13
那最经典的方法,这个方法,这个方法呢,是它默认生成的,跟你那个注解没有关系,那这个方法呢,也是默认生成的,对吧,因为它是VVR类型的嘛,那这个呢,Site name,还有一个site ID,还有一个呃get ID,还有一个get name,这个是因为注解生成的。还有就是我们的一个默认的什么呀构造器,诶这个呢,它也生成了,因此呢,这个就把这个指令就把我们所有的当前这个class反编译后对应的方法全部展现出来了。那除此之外呢,刚才老师也说了,这个方这个指令还可以看反汇编的代码,这个怎么看呢?啊,我们来一点高大上的啊,我们来点高大上的,那这个大家做一个了解杠C。
14:07
二杠C回撤,好,同学们可以看到,当我这样一输过后呢,你会看到,诶多了好些东西,看这里啊,他说你的这个类里边有一个方法name。这里面呢,这个地方的code代码大家看,如果学过这个,呃,学过一点汇编的同学就知道,像这个加载get field的,还有这个return,这些都属于汇编的代码,他也说直接可以看到反汇编的一些内容,当然这个呢,同学们做一个了解就可以了。好,呃,这个这个指令呢,大家就知道可以干什么事,好,这是我们讲的第二一个题,好第二个题,那第二个题说完以后呢,我们来看下一个包的引入啊,包的引入,嗯,那么第一个题他说练习包的各个声明方式,并查看他们的不同,这个我不讲了,我们回忆当时我们讲的一共有三种包,诶就是引入方式很多啊,这inport的这个指令有很多,我就不再一个个的过了。
15:11
那么我们来看第二一个题,他说编写一段程序,注意听这句话,这个题稍微有点难度。这个题对我们目前有点难度,它本身比较简单,但是因为我们有些东西还没有讲到,比如像集合没有讲到,所以说呢有一点小难度,我们来给大家做一个讲解,他说啊,编写一个程序,将Java哈希映射,哈希映射就是我们的那个哈希map啊,这个哈希映射就是哈希map。注意听啊,你们前面学过Java的,就是哈希map中所有的元素拷贝到斯SC纳里面的这个哈新社,也就是说他用到什么呢?是SC里面的哈希map做一个什么呢?做一个这个呃,拷贝。啊,用引入语句重命名这两个类,注意啊,人家这有一个要求,他说用引入组指令重命名,这在这个地方就是让我们去使用一下对一个类进行重命名的这么一个知识点,那这个题呢,很简单,我们来看一下,这里我写了一段代码,大家大家来看一看,很简单啊,第一句话,我们。
16:22
这句话我相信同学们都能看懂,就是把Java里面的哈希map普更名为Java哈希map普,就是达到因为人家,因为人家这有这个要求嘛,对吧,所以说这个呢,就是呃,命名重命名啊,重命名没没毛病,第二个题呢,一样的道理,这个地方是collection.mumu是代表可变的意思,可变的意思,那这里面用的是谁的呢?这个就是我们SSC里面的一个集合所在的包,对。那么这里面呢,也有一个哈希map,这就是SC的哈希map了。
17:02
那sky map map呢,我我也达到他的要求,就是给它重命名叫scan哈西map,后面这个你可以不管,后面这个其实没有用啊,后面这个是有点多余,我就把它用个下划线就完了啊,因为我本身也没用到,没用到我把它改一下吧,好,下面再看这句话,这句话对我们来说比较简单啊,这地方是我定义或者说声明的一个Java里面的哈希map,注意这个叫泛型。这个是在开里面指定,泛型呢,是用中括号来指定的,这是泛型。这是泛型。啊,指定这个泛型在开里面指定泛型呢,是中括号,在Java里面指定泛型呢,它是这个间括号,对吧,就这么一点区别,那下面这一堆我就不解释了,大家一看就懂。往里面扔进去了四对k value对吧,这个就是数,就说push或者加入了加入了四队四队。
18:06
这个是对什么呢?K value没毛病,那下面呢,就直接看下面这句话了,大家看这里,这句话是我去创建了。创建了一个什么呢?哦,创建了开的这个哈西map曼map简写一下,这个对我们来说也没难度,好下面这句话有点难了。呃,这句话呢,我做一个解释啊,为了让大家看的清楚一点,干脆我把这呃,把这段代码呢给同学们拿过来做一个解释,因为在那讲起来有点小困难。好,我在这儿来写一个啊,我在这来写一个。诶,为什么这个包。哦,Homework,好,我就见这吧。好,我就建这来,我们新建一个,呃,这个地方呢,我们就叫做exer,诶不对,呃,刚才我们建的这个文件。
19:03
哦,刚才。哦,刚才打包了一下是吧,打包了一下,那就还在这写,还在这写啊。还在这写,来新建一个。EXERC04好的,同学们注意听啊,同学们注意听,来吧,各位朋友,那到老规矩,咱们这一个主函数,然后呢,我把刚才要注意呃,这个地方它的写法有点区别了,它是怎么写的呢?大家看我这里没有用这个主函数,而是直接搞了一个继承叫APP。APP那我简我先简单解释一下这个,先把这个解释一下啊,同学们第一次看这个APP呢,我做一个解释什这个当我们一个object注意听说明一把说明一下啊各位同学第一点当。当我们当我们的,当我们一个,呃,当我们继承了,继承了APP后。
20:04
就可以干什么呢,就可以就可以直接在这个类中,这个类中执行类中执行代码,那种执行代码,那为什么呢?原因我做一个解释,大家看。我们以前都是在里面写个主函数,以前我们都写一个主函数,现在你不需要写主函数了。就说执行代码不需要,不需要再写一个主函数的入口。那么为什么呢?因为这个APP我们的看到我进去。它这个APP是一个treat,我们今天马上就会讲这个treat treat是一个叫特质,它在scan里面兼顾Java的接口和抽象类的特征特点,也就是说在scan里面这个trade呢,就等价于Java的两个角色,哪两个角色呢,一个是接口,一个是抽象类,它在这里面呢,有一个方法,直接把主函数扔进去了。
21:09
OK,那也就是说如果我在这里追听,如果我在这里写了一个print OK,那么这个代码就可以直接执行,因为它会在底层,我我们可以看一下啊。运行下线。我这里就不做笔记了,大家认真听就行了,因为这块是个是个题,好他这句话会被怎么样呢?他这句话会被包裹到这个主函数里面去,那么我们查一下它的反反编译的代码来。好同学们,我们这这个就看一下就就就OK了啊,打开刚才我们写的这段代码是在这个位置。CHAPTER07HOMEWORKER里面有一个,大家看这里零四,零四呢,大家看这部代码生成的很多,生成这么多东西,根本的原因就是因为我们加了APP,因为你你继承的APP就会把APP里面那一堆的方法全部走过来,其中有一个方法就是主方法,那么我们追进去看一下,点这。
22:12
点到这里面再看它的主函数。大家看这个组函数这里面就是我们这个组它会用一个,诶,它会找到你app.class me,它用一个反射,它用一个反射去调用我们这个APP里面那个主函数,在这个主函数里面呢,就会把我们传递的参数和代码放进去看这里最终它执行的他在最底层会去调用这个OK。好大大体就是这样一个逻辑啊,好,同学们反正知道这个意思了,好现在我说完了,过后呢,我把代码给大家放过来。好,现在前面一堆我已经做了解释了,刚才现在我们对这个负循环做一个说明。说明一下这个负循环是怎么回事,那大家看,首先看这里。
23:00
java.map k site这个是干什么呢?做一个说明啊,同学们不要着急,这个是。这里是将将Java。Java map map的这个K全部取出K。K。转成一个数组。那有些同学老师我看不懂,看不懂的话,我给你们重新单单打一份。单打一份,那同学们可以看一下啊,我运行一把print printt,我直接给你们运行一下这个代码,map.k site,点图示顺,你们看一下这是什么东西,它转成一个数组,那么我们执行一下。其实就是得到了1234,其实就是得到了1234,在这方还这地方要这样看还不行,因为这个数组打印呢,它会直接打印出它的一个哈西扣的字,那我要看这个的话呢,我可以单独的给你们这样遍历一下啊同学们,我单独的给你们遍历一下,我这样写一下啊,For循环。
24:06
呃,其实下面这个都有了,呃,那就那就我把这个打开,打开,我单独只打一下这个K。好,这个K是什么呢?同学们可以看一下,K等于其实就是一堆那个就是那个1234。K这个K就是你这里面的这这些东西1234,我们执行一下。同学们,请看执行的效果。同学们请看执行个果然是1234啊,他就这个这个作用好,他把这个K呃遍历出来以后呢,第二步他做了什么工作呢,大家看下面的这段代码,这段代码呢,大家。他就完成了一个什么工作呢?这句话的意思啊,看这里先解释一下这句话的意思,好吧,这个看起来有点同学们还没学,所以看有点看不懂啊,我先解释这第一句话,我先解释这第一句话,这句话是将注意听将将K转成啊,就是转成强制转成啊,转成什么类型呢?转成int类型。
25:12
那为什么要转成int类型呢?因为你将来要把这里面东西放到SC里面。它这写的是in特。这个相信同学们应该能看懂啊,将K转成int类型。哦,OK。这个应该大家能能能能够理解。第三一个看这Java map.get这个我相信同学们有Java,记住应该知道是什么,就是得到得到这个K对应的value,哎,对应对应的什么玩意儿呢?Value这个对我们来说没难度,也就是说比如说比如我们这是一,它就返回一个one,如果是四就返回four没问题,下面。这个地方稍稍有一点麻烦,这个地方是干什么呢,这个小括号。
26:01
这个就代表它是一个一对,那你也可以认为它是一个对偶元组也可以,那其实它就是一,就是我们的K86,你可以认为整个这个呢,是一个KY6,是是一个KY6,你也可以理解成是一个队友元组啊,这个队友呢,我们还没讲啊,所以简单理解就是K86第五一步大家看这里。这个同学们可以有点不理解了,加等这个就代表加入。这个就代表说累积将我这取出来一对K86放到这里面去,再便利又取出一对放到这里面去,这一句话就是加入啊,将将什么呢?将这个取出来这一对k value6 k value6加入到A,加入到哪里去呢?加入到这里面去完事了,这你本身要求就是这样子的呀,你的要求是什么?将Java里面的所有的k value加入到SC嘛,拷贝到嘛,你加入就是拷贝啊,你也可以理解就是拷贝好同学们代码就说完了。
27:05
呃,有一点点啊,有一点点就是这里面有有一点没大家没有讲过的,那我一步步说了,相信同学们能能能听清楚好最后这一句话。其实最后这句话呢,你完全就可以不要这个MK了,我直接输出这个地方直接输出已经可以看到效果了,来走一下。啊,大家看这个时候就已经拿到scan map里面的东西,看他已经把它取出来,而且我们看到map是无序的,Map是无序的对吧?诶,已没有给你的这个加入顺序保持一致,但是呢,东西确确实实取出来了,那后面这句话代表什么意思呢?我也说一下make。这个呀。Make就是说把你这个呃,Map里面的内容取出来,然后用空格间隔形成了一个字串,你看它返回的是个什么玩意呢?它返回的是一个。缀字符串就这么一个作用。
28:01
就说在。这为什么这个写错了啊,忘忘了写东西了啊,间隔用什么写在SC里面提供了大量的函数啊,大量它相当于把这个map转成了一个字符串,中间用空空格隔开,好,这就是我们这个题的一个小小的讲解好的,那么这因为我这边讲的更细致一点,所以说我干脆把我这里面讲的这个内容呢,给各位同学拷贝到我们的这个笔记里面去,大家看的应该更清晰一些。好,各位同学,关于我们第四个作业的讲解,我们就说到这里。
我来说两句