Java中方法内的可变参数怎么使用 java中怎么定义参数可变的方法?

作者&投稿:章研 (若有异议请与网页底部的电邮联系)

Java1.5增加了新特性:可变参数:


适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。

注意:可变参数必须位于最后一项。当可变参数个数多余一个时,必将有一个不是最后一项,所以只支持有一个可变参数。因为参数个数不定,所以当其后边还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项。


可变参数的特点:

(1)、只能出现在参数列表的最后; 

(2)、...位于变量类型和变量名之间,前后有无空格都可以;

(3)、调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中一数组的形式访问可变参数。

public class Varable {
 public static void main(String [] args){
  System.out.println(add(2,3));
  System.out.println(add(2,3,5));
 }
 public static int add(int x,int ...args){
  int sum=x;
  for(int i=0;i<args.length;i++){
   sum+=args[i];
  }
  return sum;
 }
}


Java1.5增加了新特性:可变参数:


适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。

注意:可变参数必须位于最后一项。当可变参数个数多余一个时,必将有一个不是最后一项,所以只支持有一个可变参数。因为参数个数不定,所以当其后边还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项。


可变参数的特点:

(1)、只能出现在参数列表的最后; 

(2)、...位于变量类型和变量名之间,前后有无空格都可以;

(3)、调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中一数组的形式访问可变参数。

public class Varable {
 public static void main(String [] args){
  System.out.println(add(2,3));
  System.out.println(add(2,3,5));
 }
 public static int add(int x,int ...args){
  int sum=x;
  for(int i=0;i<args.length;i++){
   sum+=args[i];
  }
  return sum;
 }
}


Java中方法内的包含可变参数的方法
创建一个工程,或者在已有工程中,创建一个包,写一个类,我命名为Parameters,大家随便。
核心就是这个方法, 把参数is理解成一个数组就是了:
private static void function(int... is) {
  for (int i = 0; i < is.length; i++) {
    System.out.print(is[i]+" ");
  }
}
为了使这个方法更复杂一点点呢,我们可以填一点儿小功能。
比如,我想得到累加值,嘿嘿,很简单的。
方法之初申明一个int类型变量,赋初值为零。for中与数组中每一个值进行累加。如图
好了,写一个很简单的方法测试一下。
main()里面写
function(new int[] { 1, 2, 3, 9, 7,});
最后,运行一下结果,很简单的吧?

java方法内的可变参数主要是针对于从前台页面传值过来,可变参数接值;
当前台有访问此java类中的某一个方法的同时传过来一个值,可变参数接到值之后进行相应的处理。

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

java反射调用可变参数的方法的方式是传入objects参数,如下代码:
public class Reflect { public static void main(String[] args) throws Exception { Class clazz = Single.class; Single single = (Single) clazz.newInstance(); List list = new ArrayList(){ private static final long serialVersionUID = 1L; { add("fuck"); add("ni"); add("mei"); } }; //获取method两种方式, 在method中 数组的的空间大小是可以随便写的不一定使用0 /* 1 */ Method method = clazz.getDeclaredMethod("method", Array.newInstance(Object.class, 0).getClass()); /* 2 */ method = clazz.getDeclaredMethod("method", (new Object[0]).getClass()); //初始化参数 /* 1 */ Object objs = 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, new Object[]{ objects }); }} class Single { public void method(Object... objs) { System.out.println(Arrays.deepToString(objs)); }} 结果:[[fuck, ni, mei], 23][1, fuck, [fuck, ni, mei]]

方法的重载,
语法是:
访问修饰符(public) 方法类型(void等) 方法名(参数1,参数21·····){ 方法主体}
方法类型和方法名一致 根据参数类型和个数的不同 自动选择相应的方法

请采纳!

java怎么通过反射的方式调用可变形参的方法
答:ava反射调用可变参数的方法的方式是传入objects参数,如下代码:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 public class Reflect { public static void main(String[] args) throws...

什么是低级格式化?有高级格式化吗?
答:这时屏幕上告诉用户现在的磁盘参数(柱面数、磁头数及每道扇区数)是标准的;1号 驱动器为:305个柱面、4磁头、每道17个扇区。这时可以键入S选用标准参数,也可打 入N,选一个非标准的参数,然后用W命令将用户所选的配置信息写入配置记录区,供 以后使用。 ⑸R--退出DM 在主菜单中选R或回车(缺省为R)即退出DM,返...

DM磁盘管理工具的功能
答:/4 DOS 4.XX版本方式(仅DM 5.01版有此参数)。/V DM运行于可改变簇长度、根目录项方式。在实际使用中常用以下两种方式启动:1、A:>DM (自动方式。初始化硬盘时很多参数都用默认值几乎不要人工干预)。2、A:>DM (手动方式。作格式化时一些参数要人工指定)。三、使用DM的注意事项 1、自动方式和...

请问如何安装使用DM软件?
答:首先输入的主分区的大小,然后输入其它分区的大小。这个工作是不断进行的,直到你硬盘所有的容量都被划分。完成分区数值的设定,会显示最后分区详细的结果。此时你如果对分区不满意,还可以通过下面一些提示的按键进行调整。例如“DEL”键删除分区,“N”键建立新的分区。设定完成后要选择“Save and Continue...