00:00
啊,那重点完以后呢,我们来说下边一个知识点,这个知识点的话呢,叫做可变个数的行参,哎,可变个数行参它其实呢是一个小的知识点啊,嗯,在GDK5.0的时候呢,加入了这个叫可变个数型三啊,它叫这个were啊,这个arguments是吧?这其实就是variable number of arguments这样一个机制啊说呢,允许直接定义能和多个食参相匹配的型参。从而呢,可以用一种更简便更简单的一个方式呢,来传递个数可变的时差。啊,这猛一说呢,看着有点懵是吧?哎,它这核心的话就在这儿啊,允许呢,直接定义能和多个食材相匹配的型材。啊,这是我们这里一个目的啊,所以呢叫可变个数的型材啊,直接呢咱们来描述啊,这块呢,我们在张二一这块新建一个文件。啊,关于我们这个方法的叫argument参数的一个测试啊,这里边儿涉及到叫可变个数行三的方法。
01:02
啊,这个我们呢叫可变个数啊,行参的这个方法,主要呢,我们来说的就是可变个数的行参这个事儿啊,首先呢,提到它是JDK5.0新增的内容啊,相当于呢就是一个新特性了啊,那么具体的使用,哎,我们呢,关注这样的一些点就完事了啊,我们主要就看这些点都有什么行,那咱咱们呢就展开来说。嗯,这个呢,我们这个上午的时候呢,提到了叫方法的重载,那我们呢,就可以写类似于这样的一些方法啊,比如这写个收方法,参数呢是一个哎哎,具体这个方法体的方法体我就详细的不展开了啊,然后public y,我这写一个收方法,这呢是一个string类型的S,嗯,这两个方法呢,很显然就构成重载。然后现在的话呢,我定义了一个这样的方法,哎public,哎,Word,我这写个show,哎此身的话呢,是死针类型,后边呢点点点。哎,三秒以后的话呢,我们我再定一个这个变量的一个名啊,我叫sts的。
02:06
好,这呢,就叫做可变个数的型材。就是没有见过这格式啊,比如我这样写成一个呃中号,你知道啊,这是一个随性数组了,这是它的参数类型,那现在呢,我用的是点点点,嗯,把它呢,就叫做可变个数的行参啊,我们在这标示一下,相当也提到了第一个问题,就是它的一个格式啊,可变个数行参的这个格式,格式呢就是数据类型,然后呢点点点,然后变量名。或者说你要参数名也可以啊,因为咱这呢,主要针对的就是行参了啊,这是它这个格式,这个格式写完以后呢,大家可能比较关心的就是我该怎么去调用它。来,我们下面来调啊,咱们要到目前为止,凡是涉及到自己定义的这些方法,哎,都得通过对象来调,所以呢,我们先得创建当前类的对象。
03:03
接着呢,通过我们那test,咱们去写这个叫数,好这个数的话呢,如果写个12。那很显然,掉的是。哎,其实你看我把这个光标往这一放,它这也跟着这个变颜色了,你就知道的就是它,或者你按照这个CTRL键一点,哎,它蹦到这了,知道掉的就是。哎,这是我们叫的是这个int型啊,那如果我写一个show,这里边呢,我写了一个叫做hello。那我这时候掉的是哪个呢。哎,对,你点一下是不是放到这了,哎,说明就是它哈,这个我们为了证明一下,你可以这里边我就写上一个受,哎,这个呢,我写一个它的参数呢,是死string类型,哎,比如说这样子啊,我们执行。啊直行啊,第一个呢,这个我们里边没有输出信息哈,第二呢,Hello的时候呢,这块输出的就是它,说明呢,我们这个调呢,输出的就是它啊。然后呢,大家看我要是把这个要是注释掉。
04:02
就是我们这个数方法带一个死锥形参数的啊,我说掉诶大家看。并没有报错啊,没有报错,我这时候按住这个CTRL键,我一点就跑这来了。说明呢,就是我们这个方法呢,诶好像它们也适用于,哎,也确实是,这就是咱们所谓的叫可变形参,它的一个实际使用上的一个点啊这呢,我写上一个参数叫四锥类型的STRS来我们执行一下。OK,那确实是这样子的啊,这样补一个小括号。好,那这呢就说明了,呃,我这呢叫可变个数,形象的方法就是我这是一个齿轮类型的,这里边呢,你填几个都行,它都能够识别。啊都能识别,那刚才大家也看到说,诶,那怎么。那怎么我把这个打开的时候呢,就先识别它了呢,因为呢,你这块有一个非常确定的就是一个的,所以它就优先考虑它了而已,啊永远考虑它而已,这个呢,假设呢,我们就先不考虑它,你把它注入掉也行,那这呢,我们看到当然我们这个可辨认行单的这个方法写完以后,我呢,就按照它的这个类型要求,我传了一个hello,诶能够识别那这个之后呢,我再传两个,诶一个hello,我再写一个word,诶大家发现了,诶它这也不报错,说明呢,哎,他执行的也是它,你写三个四个五个都是这个方法。
05:27
哎,这呢,就是他这个想表达的一个意思,也是我们这个新特性小描述的点啊,就这里所说的哈,说呢,我们允许呢,定一个方法,就是可变形态的方法,定义完以后呢,我直接可以,哎跟有多个实参的这种情况可匹配,哎去取匹配,哎这呢,你看我匹配的有一个的,匹配有两个的,那再多说一句,能不能匹配没有的。你看我这个没有参数啊,我点一下受不也跑这来了,哎,就是它能跟这个参数呢,我这叫可变个,它就实际上是可以是零个,可以是一个两个三个啊一直到你想写几个都行,那下边呢,你看这三个我们去执行。
06:10
哎,都执行的是咱们写的这个可变形参的这个操作。啊,这就是我们这个使用它的时候的一个点哈,一旦呢,我们定义了一个可变形态这样的方法以后,当我们去调这个方法的时候呢,哎,你就可以传可变个数和参数啊,都是可以匹配它的啊这个我们再来写一下,当哎调用可变啊,可变个数行三的方法时。可变个数啊,形成这个方法时说这个传入的。哎,传入的这个参数个数,哎可以是零个,哎,然后一个。啊,然后两个哎,等等,或者是这个多个都可以匹配到咱们的这种情况。
07:06
啊,这就是我们这个操作的一个核心了啊,这就一个核心啊,就是以后呢,咱们看到一些系统的源码的时候,甚至说呢,我们自己再去定义方法的时候,有时候可能呢,就会这样的方式来去定义,哎,那你知道在调二用的时候呢,就是哎,凡是这样写的,它就不像咱们之前见到这个方法一样,写了这个参数呢,就只能传一个,写了俩就传俩,这呢就是诶你匹配几个都行,但是要求就是这几个传的参数呢,都得是前面指定的这个类型的。哎,都得是死人形才行啊,你像这个后边呢,你突然逗号来了一个三。显然就不行了。哎,就是你这都得是string才可以啊啊这是说的这个情况,然后呢,我们把这个呢,打开以后,呃就发现了,说这个时候呢,他呢就呃没有走这个了,是因为咱们这儿呢,突然你出现了一个非常确定的一个,就是一个string,所以他就优先考虑的是执行它了。
08:03
这个也不难理解哈,就点像咱们上午讲这个,哎,重载的时候呢,这不是咱们也写过这样的情况,对我写这个一跟二,他不是也是优先考虑,是先是int的,你要把这个住这了,他就开始往这匹配了,有点像这个一样啊,所以呢,这个互相理解好,那这呢,我们想说的就是呢,咱们现在呢,写了这样的三个方法,这三个方法之间咱们都把它们叫做重载。啊,也就是说呢,可变个数形态的方法与本类当中这个参数不同的其他的同名方法之间构成啊说可变个数形态的方法,哎,它呢与本类中,呃,这个这个方法名。呃,方法名相同,呃,然后呢,行参类型呃或者叫行参不同的这个方法之间构成重载,哎构成这个重载,哎就是他们呢是可以共存的啊,尤其呢是大家注意一下,就这个方法和这个方法是可以共存的,认为呢它这个参数是不同的啊,不矛盾啊。
09:16
行,那这是我们说的这个第三个点啊,与本类中方法名相同,形成不同的这个方法之间的构成重载,然后下边第四个点,在这些方法当中呢,有一个比较特别的是这一个,大家看我这呢定义一个叫public,叫word,也叫受我现在这个参数呢,定义成锥形的数组。哎,大家看这时候呢,报错了,哎,那错误原因我们把光标往这一放,哎,它提示一个叫duplic,跟我们上午呢,写重载的时候呢,也遇到过这样的一个声明。哎,就相当于对我们的编译器呢,就认为这两个一样了啊,认为这两个一样了,那其实这呢,就提到一个历史的原因了哈,就是原来咱们在JDK5.0之前,如果大家呢,需要传入多个参数的话,比如多个都是四锥参数,咱们呢,那个时候都是用四锥形的数组,咱们知道数组里边可以放多个了,嗯,这个一个呀,两个呀,三个呀,甚至你也可以证明它数组长度是零,那就一个也不放了是吧?嗯,就是都可以是吧,或者你这就就直接传这个no也行啊,就是原来呢,我们想传入可变个数的话呢,其实都得是用数组来做。
10:33
那这这5.0以后呢,你也可以用数组,但是呢,这时候给你加了个新特性,说呢,可以更简单一点啊,就直接呢使用这种方式可以的,然后呢,他认为编译器就认为这种方式跟这种方式呢定义的是没有区别的。啊,你从这两个里边你选一个就行啊,所以说呢,这两个方法是不可以共存的。啊,这个大家要注意一下啊,我们把它给标志出来,嗯,可变个数形态的方法,它呢,哎,与本类当中方法名相同啊,方法名相同,然后行餐类型。
11:10
啊也相同的这个数组啊之间啊不构成重的。不构成这个重载,哎,或者换句话说的话呢,他们二者呢,不能共存。不能够共存,就是我们要写的时候呢,要么呢,你就是不用新特性,那就是还像以前一样,你这样去写。嗯,这样去写呢,那就意味着呢,大家看啊,我把它打开,我把它呢关掉,如果呢,你要是需要传多个参数,也不确定是几个,那你可以用这个数组的方式,那咱们的这块,那这就报错了啊,但是呢,我也先注释一下,那你就得这样做了,我test点我去受,咱在这里边呢,你得去new一个SP。那在这呢,比如我们传入一个A。
12:01
哎,BB,哎,CC好,通过这样的方式呢,咱们实际上调的就是目前是一个数组了。啊,这是原来的情况啊,说现在的话呢,说不用那么复杂了啊,你要用亲特性的话呢,你就把它注释掉,把这个打开,这个打开以后的话呢,我们现在呢,你就不用去拗这个数组了,直接呢就把这个a ABB CC就写进去就行。稍微稍微的省了那么点事啊,不用去拗了,直接光放这几个值就行了,那这几个值如果咱们在数组中大家想变利的话呢,你就写个后循环,那如果我要是在这个里边,我想去获取每一个你这个填进来的这个元素怎么办呢?哎,跟咱们在数组的写法呢,是完全一样的,哎,你就把这个参数呢,把它就看成是一个数组就行,所以呢,便利那还是这样写,哎,它呢也有这个叫烂属性。啊,实际上的话呢,它就相当于是个数组啊,只是从那个格式上来讲呢,它简单了用了几个点来表示的,那我这呢,输出一下sts,你看调用都一样。
13:05
啊,就这种情况啊,那咱们上面这不是去调它了啊,呃,这个呢,我也都先注释掉,呃,这个呢没有输出啊,主要呢就看他。那是不是也照样的都能够出来。改成出来,呃,其实呢,就没有任何区别哈,就是说白了呢,就是原来呢这样写,现在这样写,里边呢该怎么调,调的时候呢,跟数组的写法也都完全一样。啊也都完全一样,甚至的话呢,大家看这啊,我刚才呢,是不是有一个这个有个他是吧,你看我把它加上以后呢,它都没有报错,那我加上了,加上以后呢,没有报错,这时候呢,按住CTRL键,它还认为是这个格式。对,就是你要想传个数组也行啊,他认为呢是匹配他的,那执行一下你看还是一样的。
14:02
啊,所以说这个呃,好像看是看似那个这个知识点好像很多,其实的话呢,就相当于呢,原来我们是用了个中括号,现在呢,换成三个点了,然后第二的时候呢,你还可以像数组一样这样去掉啊也可以呢,就把这个应用的这个结构呢,省省略掉啊,直接的光写这样的几个字符串。就可以了,就是这样的一个点啊好,那还有什么点呢?呃,这是下一个要求,就是我们在一个方法当中,你这个方法的行参呢,说可以有这个可变形参,但是要求的话呢,说这个可变行参,它呢在一个方法的行参中呢,最多只能有一个啊。这个我们写一下,说可变个数行参。哎,他呢在方法的行参中最多,哎,或者应该是这样说吧,在这个方法的行参中先是有这个点啊,说是要声明的话呢,只能声明在末尾啊,可变个数行三,在方法的行三中说必须呢声明在末尾,先说这个点啊,必须声明在末尾,我这呢就这一个参数,所以呢,看不出来了,再写一个他问了。
15:16
哎,Y的受,哎我这呢,比如写一个in的形的I,然后我再写一个四针类型的啊IS。哎,这么着,这样呢,显然是满足题目的要求了啊,我写到末尾了,这不就俩参数,但是如果呢,你要是把这两个颠倒一下。把它写到前边逗号一下,哎,这时候就报错了这个错误的信息,哎,我们把它粘过,诶粘过来。请出C还有点长啊,说the valuable argument,说你这个变量的参数是string的这个啊,说呢,嗯,受方法的这个啊,说must be the last para。
16:05
说必须得声明成最后一个是吧,啊,就是说的这个点哈,就是你这样写的话呢,目前是错误的啊,他必须得放成一个最后啊,你可能会想哎,为什么非得加这样的要求啊。诶对挺好的啊,就是我比如说啊,他允许这样的存在,你像咱们变译器呢,我们去调收方法啊,我这收方法呢,我咔咔写了写了比如说四个参数,写了四个参数的话呢。这个前面的方法假设都不满足了,就看到他这了,到他这的时候呢,变器分不清楚什么呢,是你这四个呢,是都是他的,你忘了写后边那个。还是说呢,这个我这三个呢应该给你,然后这个呢,应该给后一个,因为一上来呢,前面这个就就不就可变,你不知道它到底应该给他分配几个啊,所以变音器就晕了啊,这是我们说的不能够把这个可变的个数呢放到前面的原因啊,它这个长度不确定,像以前的话呢,像这种写法,这都没问题,这其实就是一个变量啊,就是一个数组变量,以前呢不会出现这种情况,好,这个大家要注意这个情况啊,另个就说呢,我们要写呢,也得把它写到后面。
17:16
啊,那既然这要写得把它写到后面,实际上呢,就自然而然的就会有一个这个这个推演出来的一个结论,就是说我们这个形参的要有可变形态的话,最多也只有一个了。因为你要有两个,是不是总得有一个在前边,一个在后边吧,啊在前面这个有又不满足说他是最后一个了啊,是这样的啊。哎,这呢,我们叫2.6说呢,可变个数的形,呃,可变个数形态,那个形态当中,方法的形态当中,哎,这个最多。只能哎,声明一个啊,可变性参。呃,因为呢,要想声明它只能放在末尾啊,那我们就意味着呢,说你要有多个参数的话呢,那也只能是写一个它。
18:07
啊,就跟说这个那一山不容二虎一样,说这个山林里边呢,最多只能有一个这个大王是吧,你现在突然来了,俩俩都想大王当大王,那必须得干掉一个,哎,只能存在一个,哎跟这个就有点类似啊,行,这呢就是我们叫可变个数清单的方法啊,其实呢,写的好多点,其实你细细品味一下,其实也没啥新东西。就是多了一个这样格式的一个方法,大家以后用的时候呢,诶,你知道见到它就可以往里边存多个,哎,对应这个类型的这个变量,根据需要想填几个就填几个。嗯,那这个方法到底什么时候会用呢?呃,咱们简单说一个这个例子啊,我就描述一下就可以了,比如说后边呢,我们去写这个circle,咱们来操作数据库的时候啊,大家如果接触过啊,咱们想从这个数据库呢,想查询数据啊,我查一些数据呢,通常我们会加上一些条件,这叫过滤条件了,比如我想查询一下,比如说这个ID是多少的,并且呢,这个名字叫谁谁谁的,呃,这个人的一些信息,或者他的购物,购买的商品的一些信息,或者说他浏览的一些记录等等,那这些时候呢,我们外后边这个条件呢,你不知道用户到底要写几个。
19:18
他可能说问我就想起ID是多少,那就一个条件,那如果说我想查询一下ID是多少,同时内又是多少,那就俩条件,那还有可能三个四个五个,所以用户可能要查询的时候,这个条件选的个数就不确定个,那不确定的时候呢,咱们这块呢,他想查ID是谁的,咱们呢就可以先用一个叫占位符的位置呢,先给它充当它可能还有其他的条件啊,这就会有几个占位符啊,这个占位符你可以把它理解成就像一个变量一样啊,那咱们就需要给这个变量呢,给它附上值。比如说你想查ID是1001啊,内幕呢叫to姆,并且呢,出生年月是又是哪一天的啊,那你填的那个值就可能是不确定多个,因为你不知道用户他的他想查的这个条件是多么苛刻是吧,那填的这个值咱们就可以用可变形参的来表示,因为用户呢,可能查的是两个条件,也可能三个条件,可能四个条件,那你给这个呃问号叫障碍服去填值的时候呢,就是可变风格的,哎我们就会用到这个可变性材啊那暂时的话呢,哎,咱们讲到这个知识点大家呢,诶我一说完了,哎大概你一听也明白了就可以了,等到后边用的时候呢,哎,你再回过来去看它该怎么用。
20:34
啊,现在的话呢,我们没有具体一些场景带着大家去,呃去去学,你可能感觉稍微还是有点抽象啊,就这个情况,像这个呢就完了啊。
我来说两句