导航:首页 > 编程语言 > java可变参数函数

java可变参数函数

发布时间:2022-07-21 01:25:49

java 可变参数是什么

java 可变参数是1.5版本的新特性,也就是说用户若是想定义一个方法,但是在此之前并不知道以后要用的时候想传几个参数进去,可以在方法的参数列表中写参数类型或者数组名,然后在方法内部直接用操作数组的方式操作。

(1)java可变参数函数扩展阅读

java可变长的形参声明格式:dataType...parameters。

其中,省略号表示数据类型为dataType的parameters参数个数不固定的,可为任意个。此外,在方法调用时,变长形式参数可被替换成1个、2个或多个参数。在编译时,方法的变长参数将被看成具有相同类型的一维数组。

在java语言开发中,从JDK1.5以后,java允许定义形参长度可变的参数从而允许为方法指定数量不确定的形参。

⑵ java中的可变参数

B项是不对的,不能有多个可变参数。。。。
可变参数只能有一个,而且只能是在形参的最后一个

⑶ java中可变参数int nums[] = {1,2,3,4};为什么这样写是不对的,帮忙解释下谢谢!

int nums[] = {1,2,3,4};的写法是对。
首先你要明白“定义”本来就是一个笼统的概念,它可以是1.只声明;2声明并分配内存;3声明,分配内存并初始化。
java中定义数据就那么几种方法:
一:只声明一个数组,声明一个数组不分配内存,所以[ ]中不需要有数字
type arrayName[];或者type[] arrayName;
二:声明并分配内存,这时[ ]中必须有数字以显示数组长度
arrayName=new type[arraySize];或者type arrayName=new type[arraySize];
三:声明,分配内存并初始化,这时必须为数组显式初始化(也就是填写数组元素)
例如:int nums[] = {1,2,3,4};

PS:在(二:声明并分配内存)中,其实系统会默认初始化,int数组默认数组元素都是0,String数组默认数组元素都是空格,布尔数组默认数组元素都是false等等。
比如:int arrayName[4];其实等同于int arrayName[]={0,0,0,0};
至于int nums[ ] 和int[ ] nums本质是没什么区别的,尽量写成后者样式比较合理。

这么说应该很好理解吧!o(╯□╰)o

⑷ 关于Java可变参数问题

你好,很高兴回答你的问题。
这就是java可变参数的传参方式,可以直接传一个符合参数数据类型的数组,也可以是用逗号分割的多个符合参数数据类型变量。
如果有帮助到你,请点击采纳。

⑸ 关于Java多态以及可变形参的问题

首先,运行结果的确是sub。但不是因为“编译器认为 int[] arr 和 int...arr 是一样的”。而是因为:①可变参数最终会被编译器以数组的方式存下来;然后调用的时候会优先匹配定长参数的方法,只有当定长参数的方法一个都匹配不上了,才去找非定长参数的方法;②你这个上转型之后其实让base这个实例拥有了两个方法,一个是父类的不定长参数,一个是子类的定长参数方法;

传参不报错是因为判断参数是否合法时匹配到了不定长参数那个方法;然后执行时优先匹配到了定长参数方法(可变参和数组存储方式一致)。编译器并不知道什么可变不可变,就单纯的按照规则去校验调用;

对编译器来说,方法名称和参数列表组成了一个唯一键,称为方法签名,JVM 通过方法签名决定调用哪种重载方法。

JVM 在重载方法中选择合适方法的顺序:

① 精确匹配。

② 基本数据类型自动转换成更大表示范围。

③ 自动拆箱与装箱。

④ 子类向上转型。

⑤ 可变参数。

你这个上转型实现后,即实现了重写,又实现了一种特殊的重载;而编译器编译时检查参数合法性的时候检查到了可变参的方法(你鼠标挪到调用的地方你会看到,编译器提示的你的方法是父类的可变参方法的,因为此时这个参数不是数组,是匹配不到定长参数的子类方法的);


然后编译好具体执行的时候,编译器哪还知道什么定长不定长,就按照优先级去调用方法,自然就把优先级高的子类定长方法调用到了,不存在什么动态绑定。


这里如果你把子类和父类的参数交换(子类是可变参数,父类是数组)那你的调用就报错了,因为可变参兼容数组,但是数组却不兼容可变参,这样就只形成重写而没有重载,然后上转型后就只能调用父类的方法了。就会报错咯

⑹ 如何通过java 反射 调用一个 含有 可变参数的 方法呢

java反射调用可变参数的方法的方式是传入objects参数,如下代码:

publicclassReflect{

publicstaticvoidmain(String[]args)throwsException{
Class<?>clazz=Single.class;
Singlesingle=(Single)clazz.newInstance();
List<String>list=newArrayList<String>(){
=1L;
{
add("fuck");
add("ni");
add("mei");
}
};

//获取method两种方式,在method中数组的的空间大小是可以随便写的不一定使用0
/*1*/
Methodmethod=clazz.getDeclaredMethod("method",Array.newInstance(Object.class,0).getClass());
/*2*/
method=clazz.getDeclaredMethod("method",(newObject[0]).getClass());//初始化参数
/*1*/
Objectobjs=Array.newInstance(Object.class,2);
Array.set(objs,0,list);
Array.set(objs,1,"23");
method.invoke(single,objs);

/*2*/
Object[]objects={1,"fuck",list};
method.invoke(single,newObject[]{objects});
}
}

classSingle{
publicvoidmethod(Object...objs){
System.out.println(Arrays.deepToString(objs));
}
}

结果:
[[fuck,ni,mei],23]
[1,fuck,[fuck,ni,mei]]

⑺ java编程可变参数

将 int sum = 0; 改成 int sum = n1;
class Test{
public static void main(String[] args){
System.out.println(add(2));
System.out.println(add(2,3));
System.out.println(add(2,3,4));
}
public static int add(int n1,int... n){
int sum = n1;
for(int i=0;i<n.length;i++){
sum = sum+n[i];
}
return sum;
}
}

⑻ JAVA默认构造函数和可变参数构造函数之间的区别

构造函数
,是一种特殊的方法。主要用来在创建对象时初始化对象,
即为
对象成员
变量赋初始值,默认构造只有一个,构造可以有多个(
方法重载
),看传参赋值的需求来区别用默认构造还是构造函数(带参的是构造函数不带参的是
默认构造函数

阅读全文

与java可变参数函数相关的资料

热点内容
文件夹怎么做标题 浏览:31
腾讯云服务器如何防止被攻击 浏览:879
六棱柱的体积算法 浏览:933
淘宝什么云服务器好用 浏览:340
pythonoa项目 浏览:307
android杜比音效 浏览:341
杀手47为什么连接不了服务器 浏览:108
静态路径命令 浏览:533
一直编译不过怎么办 浏览:829
汽车串联并联算法 浏览:458
助眠解压的声音音频小哥哥 浏览:277
pythoncmd换行 浏览:376
linux取消行号 浏览:355
安卓原生系统官网是什么 浏览:444
底部主图源码 浏览:878
服务器崩了有什么提示 浏览:780
远程海康服务器用什么浏览器 浏览:232
解压报纸图片 浏览:956
python微信公众号开发平台 浏览:895
知识付费网站java源码 浏览:255