关键词不能为空

当前您在: 主页 > 英语 >

java可变参数

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-03-03 12:41
tags:

-

2021年3月3日发(作者:picnic是什么意思)


java


可变参数


.txt14


热情是一种巨大的力量,


从心灵内部迸发而出,


激励我 们发挥出无穷的


智慧和活力;热情是一根强大的支柱,无论面临怎样的困境,总能催生我 们乐观的斗志和顽


强的毅力


??没有热情,生命的


天空就没的色彩。深入


了解


JAVA


可变长度的


参数


(Varargs)(2010-01 -14 22:06:57)


转载标签:


it


分类:


java



J2SE


1.4

< br>为止,


一直无法在


Java


程序 里定义实参个数可变的方法——因为


Java


要求实参



Arguments



和形参



Parameters


)< /p>


的数量和类型都必须逐一匹配,


而形参的数目是在定义

< p>
方法时就已经固定下来了。尽管可以通过重载机制,为同一个方法提供带有不同数量的形参


的版本,但是这仍然不能达到让实参数量任意变化的目的。




然而,


有些方法的语义要求它们必须 能接受个数可变的实参——例如著名的


main


方法,


就需


要能接受所有的命令行参数为实参,而命令行参数的数目,事先根本 无法确定下来。





对于这个问题,传统上一般是采用“利用一个数组来包裹要传递的实参”的做法来应付。





1.


用数组包裹实参



“用数组包裹实参” 的做法可以分成三步:首先,为这个方法定义一个数组型的参数;然后


在调用时,生成一 个包含了所有要传递的实参的数组;最后,把这个数组作为一个实参传递


过去。




这种做法可以有效的达到“让方法可以接受 个数可变的参数”的目的,只是调用时的形式不


够简单。




J2SE


1.5

< br>中提供了


Varargs


机制,允许直接定义能和多个实 参相匹配的形参。从而,可以用


一种更简单的方式,来传递个数可变的实参。

< p>



Varargs


的含义



大体说来,



Varargs


”是“


variable number of arguments


”的意思。有时候也被简单的称


为“


variable


arguments



,不过因为这一 种叫法没有说明是什么东西可变,所以意义稍微有


点模糊。





2.


定义实参个数可变的方法



只要在一个 形参的“类型”与“参数名”之间加上三个连续的“


.



(即“


...



,英 文里的句


中省略号)



就可以让它和不 确定个实参相匹配。


而一个带有这样的形参的方法,


就是一个实


参个数可变的方法。




清单


1


:一个实参个数可变的方法

< br>


private static int sumUp(int... values) {


}



注意,只 有最后一个形参才能被定义成“能和不确定个实参相匹配”的。因此,一个方法里


只能有 一个这样的形参。


另外,


如果这个方法还有其它的形参,


要把它们放到前面的位置上。



< p>
编译器会在背地里把这最后一个形参转化为一个数组形参,并在编译出的


c lass


文件里作上


一个记号,表明这是个实参个数可变的方法 。




清单


2


:实参个数可变的方法的秘密形态



private static int sumUp(int[] values) {


}



由于存在着这样的转化,所 以不能再为这个类定义一个和转化后的方法签名一致的方法。




清单


3


:会导致编译错误的组合



private static int sumUp(int... values) {


}


private static int sumUp(int[] values) {


}



3.


调用实参个数可变的方法



只要把要传 递的实参逐一写到相应的位置上,就可以调用一个实参个数可变的方法。不需要


其它的步 骤。




清单


4


:可以传递若干个实参



sumUp(1, 3, 5, 7);


< br>在背地里,编译器会把这种调用过程转化为用“数组包裹实参”的形式:




清单


5


:偷 偷出现的数组创建



sumUp(new int[]{1, 2, 3, 4});



另外,这里说的“不确定个”也包括 零个,所以这样的调用也是合乎情理的:



< br>清单


6


:也可以传递零个实参



sumUp();



这种调用方法被编译器秘密转化之后的效果,则等同于这样:




清单


7


:零 实参对应空数组



sumUp(new int[]{});



注意这时传递过去的是一个空数组,而不是

< br>null


。这样就可以采取统一的形式来处理,而不


必检 测到底属于哪种情况。




4.


处理个数可变的实参



处理个数可变的 实参的办法,和处理数组实参的办法基本相同。所有的实参,都被保存到一

-


-


-


-


-


-


-


-



本文更新与2021-03-03 12:41,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/699990.html

java可变参数的相关文章