00:00
好了,同学们,咱们先上课了啊,上课了我们来看一下我们这个昨天讲解的这个内容啊,咱们昨天学了什么,咱们昨天啊,其实一天的时间我们都在学习这个方法,是不是学习方法,那么方法这块呢,我们来一起看一下啊,一起看一下。我临时在这建一个文件啊,一会这个文件我可能就删掉了啊,删掉了啊就不保留这个文件了啊,那首先第一个呢,我觉得我来问呢,大家来想或者来思考啊,首先我先问这么一个问题,就是大家觉得方法是个什么东西?对,你经过昨天的一个学习,经过昨天晚上的一个一个练习的一个一个沉淀,对吧,那么到现在为止你呢?呃,觉得啊,你你思考一下,你觉得啊,你觉得这个方法是一个什么东西啊。就首先我觉得第一个问题就是你方法,你要理解方法是啥干啥用的。方法是什么?哎,方法是什么呢?就是说这个东西啊,它是一个什么呢?是一个可以被什么重复。
01:03
使用的一个代码片段啊,并且这个方法一般呢,都是啊,为了完成某个什么特定的功能而存在的,是不是啊,如果说你这个方法的定义啊,你你不是冲着某一个功能去的。对不对啊,你说你这个呃方法啊,定的毫无意义,那肯定不行啊。嗯。一段啊,不是一端啊,一段可重复利用的,可以实现特殊功能的代码片段啊,有特定功能的代码代码框啊。来,那这个呢。我写上叫留着吧这个文件啊,叫day,嗯,幺幺的回顾吧,啊回顾啊。来这块呢,我就直接呢给大家放到。这个地方啊。叫D11的回顾啊,回顾一下方法是什么,我觉得这个问题大家要理解啊,就是方法。
02:07
是一段可以。完成某个特定功能的。并且可以被什么呀,来重复利用的什么,哎,代码片段,代码片段啊,方法的出现,方法的出现啊,让代码具有了很强的复用性啊,很强的复用性啊,这是我们方法啊,方法的一个本质啊,一般呢,我们这个方法这一块比较难的就是我们这个方法怎么怎么去提取啊方法。最最是吧,最难实现的是是什么呢?就是方法,就根据业务是不是,哎怎么进行方法的什么哎抽取啊,怎么进行方法的抽取。
03:01
对,就是这个方法的什么,哎,返回值类型定义为什么。啊,定位什么。啊,方法的名字叫什么,是不是,哎,方法的形式参数列表。啊定义为什么对吧?哎,这个其实是比较难以实现的啊,就是说你能提取出来这样一个独立的功能啊,就主要是一个独立的功能,一个方法就是一个独立的功能啊,一个方法就是一个独立的什么啊功能啊好,这个是比较难以实现的啊,这个后期慢慢去实现吧,啊后期慢慢去实现,现在你实现不了啊,现在你应该是实现不了的啊,因为你毕竟才刚刚开始学了这么一个方法是不是啊,只是一个基础语法学了一些。那么至于说怎么去写代码,怎么进行方法抽取这个东西还是有很大难度的,因为我记得我最刚开始接触这个东西的时候,我就只知道往这个闷方法里面写东西啊,然后我呢,就是在闷方法外边说提取个方法出来,我提取半天都提取不出来,有的时候就提取的时候提取过了,对吧,有的时候呢,嗯,我是是将就了是吧,我提取一个方法,我把方法提取出来之后呢,发现什么呀。
04:21
发现这个方法里边还可以再分成两三个方法,就当时就没有分,还是写的个代码冗誉,所以说这个东西其实难度很大,呃,难度很大就是说这个东西啊,还是需要你不断的呃去写代码,不断的去做东西啊,慢慢慢慢你才能够形成哦这个地方哎可以提取一个单独的方法,那个地方可以提取单独的方法,哎,咱们不是不是说提取方法来同学就说了啊,提取方法不简单吗?来咱们方法外边八写一个方法,来在这个方法里边写很多代码,那里边写一两行,这个算提取方法了,这样想的话你就错了啊,这样想的话就错了,其实并不是那么简单啊,不像你想象那么简单,其实这个提取啊还必须保证什么,最终的目的就是哎,它的一个可复用性啊,啊,目标是这个。
05:07
那么再往下呢,我们就讲了一下方法的一个。这个定义是不是,哎方法的定义。然后再往下就是方法细节,方法的每一个细节讲解啊,或者是学习是不是,哎,然后呢,这一块呢,哎,我们紧接着再往下,我们介绍一下JVM的啊,内存结构中三块比较什么重要的啊,内存空间。然后再往下呢,我们介绍一下什么呀,哎,关于什么呀,数据结构中的占数据结构是不是哎站数据结构,然后紧接着再往下,我们昨天讲的是什么呀,叫做哎分析程序运行过程中的内存变化啊,咱们昨天呢,好多同学哎就在这个微信群里面发了一些这个图片,是不是哎发了一个图,发了什么呢?发了咱们这个,呃,运行的一个内存图啊,我觉得非常不错啊,非常不错,可以啊。
06:09
非常不错,那么其实这个呢,就是我们昨天呢,主要讲解的一些内容啊,就是说你在你的笔记上有没有体现出这些重点啊,你比如说哎,你到底理解不理解什么是方法,对吧?从定义上你理解它吗?是不是?哎第二个是什么呢?就是我们的方法怎么去定义对不对?哎,方法的每一个细节问题啊,内存结构中三块主要内存空间叫什么是不是?哎数据结构中的战术有有什么特点是吧?先进啊什么后出啊,后进先出啊,哎怎么分析图会不会画是不是?哎这个呢,哎就是我们的一个主干了,那么方法定义这块的话,我们最主要啊,就是把这个语法说一说,叫做修饰符列表是不是?哎,然后紧接着有个返回值类型,还有一个方法名,哎,大框写小框里边写上什么呀,形式参数列表。
07:01
是不是,哎,然后紧接着呢,这个地方我们叫叫做方法体啊叫方法体这样,那么这个地方呢,我们就是把这个语法呢,给大家说了说,说了说之后呢,我们开始讲解这个方法的每一个细节,对不对,哎,修饰符第一个细节。对吧,第一个细节,第一个细节是什么呀?修饰符列表对不对?哎,可选项呗,是吧,是这么说的吧,哎,目前先写成什么呀?哎,先写成public static啊static你别的先不用管啊,这个就过了,然后再往下呢,我们说了什么呢?说了一下我们的返回什么是。哎,怎么理解返回值,你怎么理解是不是,哎。那返回值,返回值类型都可以指定哪些?对不对,哎,再往下的话,我们都可以指定哪些类型,是不是,哎,然后再往下呢,我们说了一下,就是返回值和什么呀,Return语句的关系吧,哎,和return。
08:06
语句的关系。啊,Return语句的。关系啊,就是他们的关系是怎样的,对不对,哎,然后再往下呢,我们说一下方法名,只要是合法的标识符就行,对不对,首字母小写,后面每个单词首字母大写啊建明之意是不是,哎,建明之。之地对不对?哎,简明之意就是这样,方法名,然后呢,再往下呢,就是我们说了一下谁的事儿啊,就是关于这个行参嘛,形式参数列表对不对?哎,再往下的话,我们就说了谁啊说了我们的方法题是不是?哎,说点方法题,那这里其实呃,隐藏的一些细节还是非常非常之多的啊,非常非常之多的,我们这块呢啊一个一个去看,首先第一个修饰符列表这一块大家还记得public static就行了,对不对?再往下的话,返回值类型,各位。
09:07
返回值类型这块呢,首先第一个就是怎么理解返回值,这个返回值是什么?返回值是一个方法执行结束之后的结果。啊,结果就是你一个方法是为了完成某个特定的功能,你执行了这个功能之后,你会有一个什么呀?哎,结果,而这个结果就是一个数据,数据就是一个值,所以叫做什么呀,返回值,那么你既然是数据是值,那么就有类型,所以在这个位置上,你需要指定的是返回值的一个类型。啊,而我们所说的是返回值类型这一块怎么说的。还记得吗?可以是什么?Java语言当中任何一种合法的数据类型是不是?哎,包括什么呀,基本数据类型也包括什么,引用数据类型对不对?哎,都可以。那如果一个方法执行结束之后,它不需要返回任何值的话,那你返回值类型这块也不能怎么着啊,空着吧,哎,你返回值类型这块必须得写一个单词,我不知道还记不记得叫VOID的这个单词,那如果出现这样一个单词,就表示这个方法呀,执行结束之后啊,它不返回任何数据啊,它不返回任何数据啊,不返回任何数据。
10:26
但如果说。如果说啊,咱们把这个返回值类型这块咱们给它搞定了,对吧,你也知道它返回值类型怎么去写了,那么再往下就是我们如果返回值类型指定的是string,或者是指定的是in,或者指定的是其他的类型,那么我们在大括号当中有没有什么要求呢?哎,是有一个要求的,就是说如果反回式类型是规定是in的,那么这个时候你在方法T当中必须能够保证什么呀?哎,这个return语句怎么着?哎,Return最后一定要怎么着啊?哎,返回一个什么哎值,而且这个值的数据类型是什么呀?
11:06
是int类型,如果你规定是顺类型对吧,那么这个时候呢,你返回的这个值啊,就必须得是个什么呀,字符串对不对?哎,有同学说老师没有这个行不行不行。你规定返回值类型是死顿,那就意味着要返回一个字符串,你最后要是没有这样的一个代码的话,就表示你前后不一致,你矛盾是不是,哎,所以这块的话就啊,就不能通过了啊,就不能通过编译期就报错了啊,编辑器报错了,但你也不能这样写,你说。连个值都没有,你直接写个return分号啊,你说你返回类型是string的情况下,你直接写个return分号,那是肯定不行的,因为它需要一个值,需要一个string类型的值,所以这个return后边应该跟一个什么呀字符串。啊,给一个字符串。跟一个字符串啊。返回值类型返回值类型。那么这个如果说你反回类型定的是VOID的话,那你在这块哎,是可以写这个return语句的,这个你如果反馈类型是VO的,对吧,你可以写return语句,这个return语句啊,它用来终止什么呀,我们整个方法的执行。
12:13
啊,但你不能写个值啊,你在后边写了一个具体的值,你说返回那肯定不行,因为你说了不返回任何值啊,那这样的话你就不能写这样的语句啊,不能写这样的语句啊,要了解一下这个东西啊,了解一下这个东西,这是关于我们返回值类型,还有我们返回值以及我们方法体当中的return语句,昨天我们还讲了一个东西叫return语句下边不能写代码。就你比如说在这个return语句下面system.on点打印输出我们写这个代码行不行不行,因为这个代码没有执行机会啊。和return语句在同一个域当中的话,Return下面是不能写代码的,是执行不到的啊,你写上编译器就会报错啊,你写上编译器就会报错啊,要了解一下这个啊,了解一下这个好,这是呃,关于我们的一个return语句啊,另外再强调一下,如果你规定是int,你必须100%的保证我们这里会有一个return语句执行。
13:07
啊,你不能说你这写个布尔类型对吧?啊,如果说我们这呢,有个布尔表达式啊,然后接下来怎么着啊,在这个地方,哎,Return什么呀,哎return一个一啊,或者return一个零啊之类的是不是啊,那么返回值类型是in它。啊,那么我们这块就必须得保证我们的语句执行,因为你这个波尔条件有可能是false,这个执行不了对不对,这个执行不了的话,那编译器就不行了啊,所以说这块呢啊,你得加一个什么呀I啊。是不是啊,或者说你不加I,在这写个return什么呀,E呀之类的啊,你必须得保证有的语句执行啊,没有的话就会报错啊,这些都是我们昨天讲的这些东西。啊讲东西,那么再往下就是方法名呢,这个方法的一个名字起名的时候很有讲究啊,很有讲究,你看你怎么起名,汉语拼音也行,英语单词也行,你随意啊随意都行啊,你别纠结啊。
14:01
然后再往下的话,你这块是形式参数列表,大家还记不记得形式参数列表这个东西可以没有吗?一个也没有行不行?可以吧,有多个行不行啊,也可以是不是有一个是不是也可以啊?如果有多个的话,中间是什么隔开啊?用逗号隔开是不是啊?In特类型A,逗号in特型B,好,我再问大家一个问题啊,就是形式参数列表当中起决定性作用的是这个。是是是,是谁起决定性作用的是谁,就A和B这个名字能不能改,比如说A改成XB改成Y行不行,可以,这是变量名对不对?而且我把这个叫做什么局部变量对吧,这个是不是也叫做局部变量啊,是不是,哎局部变量对吧?哎,这是局部变量啊,那么这个方法执行结束之后,这个局部变量内存空间就怎么着,哎,释放掉了啊,就释放掉了,那么这个形式参数列表简称行参,行参中起决定性作用的是数据类型,前面这个类型起到决定性作用,至于说我们变量的名字的话,我们可以改成别的名字是没有任何问题的啊,没有任何问题的。
15:04
你不能直接这样写啊,你说形式三里边A逗号B啊,那你不行,那你得指定类型啊,对吧,你这个变量你得指定类型啊,你说string类型是不是,哎,这个是double类型对不对?哎,你总算指定类型,你要不指定类型的话,这不行啊,这个不行来这叫形式参数列表,那么再往下这个方法体,当时我在讲的时候,我就讲了一个问题,就是方法体当中的代码遵循自上而下的顺序,依次逐行执行。啊,依次珠航执行,我只给大家说了这么一句话,这句话相当相当的重要啊,相当重要。这个是关于方法的一个,每个细节的一个学习啊,每个细节的一个学习啊,等你把这个基础法掌握之后再往下,我们说了一下Java学习三块比较重要的内存空间,一块叫什么?叫做方法区是不是,哎还有块叫什么?堆内存是不是哎堆内存,还有一块叫什么叫占内存是不是哎占内存,那么方法区存储什么呀?存储。
16:04
存储代码片段啊,存储某某某点class什么字节码文件啊,这个空间是最先有数据的,类加载器加载,就首先将代码加载到这里啊,就是类加载器实际上是首先把代码加载到我们的方法区域当中的啊,方法区当中的。那么这个堆内存呢,这个后面讲是不是,哎,后面讲,尤其是讲到什么呀,叫做面向对象吧,哎,面向对象的时候,我们再去讲这个内容啊,那么占内存呢,占内存存什么呀,还记不记得占存什么。站里边存什么,Stack当中存储什么呀?哎,局部变量。
17:01
啊,局部变量还有什么呀。局部变量,记住啊,背会局部变量,还有每个方法执行所需要的内存空间吧,每个方法执行时所需要的内存空间。啊,每个方法执行时所需要的内存空间局部变量。实际上这两个是包含关系啊,其实我说上面这一句话就行了,下面这个就不用说了,下边这个时间就不用说了,就是说每一个方法执行时所需要的内存空,你想方法执行时最主要的内存空间是啥?不就你方法里边执行过程当中有一些局部变量吗?对吧,你这个方法执行过程中有些局局部变量啊,所以这个就是局部变量啊,就站里边存的是局部变量。啊,那另外在这里我重点跟大家强调了一下什么呢,强调一下这个。方法,哎,实际上是在下边这说的啊,就是方法调用的时候,方法指定义。对吧,不调用啊是不会执行的。
18:04
方法调用。啊,怎么着啊,压战吧。对不对,哎,方法执行结束时。怎么着啊,谈战吧,压战其实是不是就是给该方法分配空间,是不是,哎在哪呀,在占中对不对,哎,那方法结束呢,结束就是将将对吧,该方法啊。占用的空间释放。释放局部变量的内存也释放啊,就这个意思啊,就这意思。啊,那么这个地方关于数据结构当中的占数据结构呢,当时我们怎么说的对吧,后进先出。是吧,哎,先进。
19:01
出啊,有这样一个原则啊,这是一个原则啊,这是我们的一个数据结构的一个原则。那么这个站呢,这块有哪些术语呢?占相占数据结构相关的术语有哪些啊,我不知道有什么占真是不是啊,有占顶元素,有占底元素是不是哎有压站啊入。站。入站啊进站是不是,哎,Push还有什么呀,哎,谈战出战是不是,哎,弹战出战还有一个单词叫什么呀,Pop pop啊弹出啊,有战争啊,战争是永远指向什么。
20:00
哎,永远指向占顶部的元素,顶部的元素。占顶元素,占顶元素具有什么活跃啊,我不知道还记不记得啊,叫活跃。权利的权啊,占顶元素,具有活跃权。永远指向占顶顶部的元素啊,站顶元素具有活跃权。占顶元素占底,然后呢,压站入站进站push弹站出站pop啊pop好,这是一些相关的一些术语啊,相关的一些术语。那么昨天呢,其实还聊了一下啊,昨天还聊了一些什么呢?就是什么是数据结构,是不是什么是算法啊,就是说这些东西呢,其实有一本书啊,有一本书啊叫做什么呢?叫做数据结构与算法啊,其实有的时候你要是哎想有更深层次的一个一个理解的话,你可以看一些这些书籍啊,但是你现在毕竟没有时间,我建议你工作的时候要看一下啊,数据结构其实就是存储数据的一种方式啊,不同的结构存储数据的方式不一样啊,然后呢,我们可能在不同的业务环境下,我们可能需要使用不同的数据结构啊,以及选择不同的算法,才可以让你程序的效率达到最巅峰啊,最巅峰就是说数据结构,数据结构和算法的选择,算法的选择很重要啊,选择对了。
21:34
程序的执行效率大大提升。啊,可以很好的优化程序啊,优化程序,所以说这个数据结构算法呀,它其实怎么说呢,它主要是呃哪个领域呢,就是说我们这个效率问题啊,效率问题,尤其现在你看咱们的一些应用啊,并发量都很大,是不是啊,上千的用户啊,上万的用户同时去访问我们这个应用啊,那你如果说啊,用户点完这个按钮之后,你要查一个数据,对吧,点完之后三分钟之后才查结果,才出结果。
22:07
对吧,或者一分钟两分钟之后才出现一个结果,那这个时候呢,客户这边就就怎么着就疯了是不是啊,就是哎呀,你这个系统怎么这么烂,那个系统怎么这么慢是不是,哎,那是因为你的数据结构和算法可能选择是哎不太正确啊,不太正确啊,不太正确,那么就像现在咱们12306是不是,哎,咱们并发,哎这么多人去买票,再加上呢,呃,有些刷票的软件是不是啊,那这个时候呢,我们这个。呃,这个并发量这么大的情况下,对不对?哎,所以说如果系统的数据结构算法的很烂,那么这个时候排队的人就会很多很多很多啊,很多很多。行了,那么这个呢,是整体的对咱们昨天内容的一个回顾吧,啊,我觉得最主要是这块。啊,就是你方法定义完之后,你方法的每个细节问题,你理解不理解,我觉得最主要是这个,至于这个内存图你会画不会画,我觉得问题都不是特别大。
23:01
啊,你说我现在内存图不会画,那没关系啊,以后慢慢画是不是以后咱们有的是机会啊,但我觉得这个你得理解了,就是你方法的什么修饰列表啊,你返回值咋理解的,对吧?你返回值类型你是怎么理解的是不是?哎,然后呢,你这个方法名啊,你怎么起名形参是个啥东西是吧?哎,方法体是个啥啊干啥的?哦对了,昨天还讲了一个就是方法怎么调用是吧?其实方法怎么调用的话,是在哪讲,在这儿讲的。每个细节里边对吧,4.8里边讲的啊,就是方法怎么调用类名。类名点是吧,什么时候可以省略是不是,哎,这个呢,我就不再回顾了,各位啊,不再回顾了。啊,就是什么时候可以省啊,哎,你自己去想想吧,好吧,哎,什么时候可以省在同一个类当中对不对?哎,方法怎么调用啊?哎用类名点,然后后面跟什么方法名,然后呢,方法名后面跟什么呀?叫实参是不是?哎在这里说一个叫实际参数列表啊,叫做实际参数列表简称什么呀?哎,食参,食参和行参的关系是一一对应啊,这个事儿我也提了,对吧?哎,一一对应就是个数要相同,哎,我们顺序要相同,还有我们这个类型要对应相同等等吧,哎,要一致才可以啊十参其实就是具体调用这个方法时传的具体数据。
24:28
啊,实参就是调用此方法时传递的真实数据啊,实参就是调用方法时传递的实际数据啊,实际数据,这就叫十参啊。好了,那咱咱们就回顾到这儿啊。
我来说两句