一、可变参数简介

在不确定参数的个数时,可以使用可变的参数列表。

1. 语法:

参数类型…(三个点)

例如: void printArray(Object...)

注意: 每个方法最多只有一个可变参数,因为:可变参数必须是方法的最后一个参数

2. 可变参数的类型

可变参数可以设置为任意类型:引用类型,基本类型;当然也会进行类型检查的;

3. 参数的个数:

  • 0个参数
  • 1个参数: 如果是数组,那么就直接将这个数组作为参数传进方法里面,不再填充新的数组;
  • 多个参数: 参数可以是数组,也可以是单个变量、常量;但是这时候会,将这些参数填充进新的数组里面,再将这个数组,传进方法里面;

4. 可变参数的使用

  可变参数完全可以当作一个数组来使用,或者说,本质上可变参数就是一个数组(下面详细介绍)。所以,数组拥有的方法、属性,可变参数一样拥有。

public void varArgMethod(int b,int... arr) {//和数组一样,拥有属性lengthint lenth = arr.length;//索引遍历for(int i=0;i<arr.length;i++) {System.out.println(arr[i]);}//forEach循环遍历for(int ele:arr) {System.out.println(ele);}
}

  上面的例子中,可变参数的使用跟数组的使用是完全一样,也就是说,可变参数是可以等价成数组的

5. 可变参数的方法重载

可变参数列表的方法的重载不同于普通方法: 无法仅通过改变 可变参数的类型,来重载方法

如:varArray(int... a)varArray(Object... a),这两个方法在调用时会出错,方法重载失败。

二、 深入分析可变参数的原理

  前面已经很详细地介绍了可变参数的各个方面。这一小节将深入去了解可变参数的实现原理,特别是为什么可变参数的使用与数组是一样的。

看下面一个简单的例子:

public class MyTest{public static void main(String[] args) {int a = 100;varArgMethod(5, 7,8,9,10,a);}public static void varArgMethod(int b,int... arr) {//索引遍历for(int i=0;i<arr.length;i++) {System.out.println(arr[i]);}}}

例子很简单,为了了解编译器是怎么处理的,我们用jad对上面例子的class文件进行反编译:

public class MyTest {public static void main(String args[]) {int a = 100;varArgMethod(5, new int[]{7, 8, 9, 10, a});//参数列表被编译器处理成了一个int[]数组}public static transient void varArgMethod(int b, int arr[]) { //形参被编译器处理成数组for (int i = 0; i < arr.length; i++)System.out.println(arr[i]);}
}

  从反编译的结果可以看出,编译器不仅将可变参数处理成数组varArgMethod(int b, int arr[]),还处理了调用可变参数方法处的参数列表,把参数列表封装进一个数组varArgMethod(5, new int[]{7, 8, 9, 10, a})

  现在看来,可变参数列表并没有多神奇,只不过是将程序员做的工作简化了,交给了编译器来处理。最后,可变参数的使用和数组一样也就不出奇了,因为可变参数最后还是被编译器处理成了数组,可变参数就是数组

出处:http://www.cnblogs.com/jinggod/p/8426046.html
文章有不当之处,欢迎指正,你也可以关注我的微信公众号:好好学java,获取优质资源。

java基础(九) 可变参数列表介绍相关推荐

  1. java基础篇(10) 可变参数列表介绍

    一.可变参数简介 在不确定参数的个数时,可以使用可变的参数列表. 1. 语法: 参数类型-(三个点) 例如: void printArray(Object-) 注意: 每个方法最多只有一个可变参数,因 ...

  2. java 可变参数列表_java中可变参数列表的实现方法

    我们在对可变参数有一定的认识后,可以引申一下它的使用范围.在数组中也会需要参数的传入,那么结合参数的数量不固定,我们在参数类型上也得到了增加,这就是本篇所要讲的可变参数列表.下面我们就java可变参数 ...

  3. php函数可变参数列表,PHP函数可变参数列表的具体实现方法介绍

    也许对于PHP初级程序员来说,对于PHP函数并不能完全熟练的掌握.我们今天为大家介绍的PHP函数可变参数列表的实现方法主要是利用func_get_args(). func_num_args().fun ...

  4. java 可变参数列表 数组_java可变参数列表如何填充数组?

    在对于数组的填充上,我们可以运行参数的传递,把数组作为可变参数的列表进行调整.对于一些参数个数和类型未知的时候,这种方法就能帮助我们解决填充数组的难题,因为这种方法并不需要提前知道.下面我们就可变参数 ...

  5. java 可变参数列表_java的可变参数列表

    关于java的可变参数列表 1.简介: java的可变参数列表是的从jdk1.5开始新增的,其英文名词varargs 2.作用 可以传未知个数的参数,无需手动将参数列表装入数组 3.语法 //可变参数 ...

  6. Java可变参数列表

    可变参数列表主要是指参数数量的可变,可以使一个到多个 package www.zxx;import java.util.Scanner;public class test {public static ...

  7. java 可变参数列表

    Java SE5添加了可变参数列表特性 参数可以这样定义,(Object-args).可变参数用"..."来定义,args是可变参数的数组.举个例子: package sample ...

  8. JAVA基础九 数字与字符串

    文章目录 JAVA基础九 数字与字符串 01 装箱与拆箱 1.1 封装类 1.2 Number类 1.3 基本类型转封装类 1.4 封装类转基本类型 1.5 自动装箱 1.6 自动拆箱 1.7 int ...

  9. C语言_函数可变参数列表

    函数可变参数列表的应用和原理 在网上看到各位前辈关于这部分的介绍有些是过于简洁,有些则是过于晦涩,有的代码拿出来甚至在编译器上跑不过去,所以在这里讲一下自己对于可变参数的认识,若有不正确的地方,欢迎各 ...

最新文章

  1. 数据产品经理:如何做需求管控?
  2. JavaScript-操作DOM对象-删除dom节点
  3. 反射之关于MethodInfo的使用
  4. Android 系统(70)---Android刘海屏适配方案
  5. 这是一个最不缺“大师”的时代
  6. ubuntu 12.04 nfs-server/client安装配置
  7. Shell脚本中的export
  8. HTML5标准有缺陷 手机电池信息可泄露上网活动
  9. 使用MyBatis快速生成代码
  10. termios结构体详解
  11. 毕业论文排版(六)-三线表
  12. HTML 语法练习---常见标签
  13. 大数据挖掘与分析——用八爪鱼爬虫采集百度搜索内容
  14. 验证iOS应用的无障碍特性
  15. 解决:Docker Container exited with code 137
  16. 台式电脑组装机相关知识之主板篇
  17. 简单的Java 16方格排序游戏
  18. 网络技术-路由器配置
  19. 基于stm32单片机的超声波测距显示倒车雷达提醒报警系统Proteus仿真
  20. 网站最下方必须显示您的备案号,并能链接到工信部网站,怎么操作?

热门文章

  1. AB1601的AD转换注意事项
  2. C++ Primer 5th笔记(chap 19 特殊工具与技术)局部类
  3. EOS 智能合约源代码解读 (10)token合约“简介”
  4. 区块链BaaS云服务(16)天德链TDBC“系统介绍”
  5. java筑基期(10)----ajaxjson(2)
  6. 【Flask】Request和RequestParser类
  7. Dockerfile 部署Djano项目
  8. AndroidStudio动态调试smali
  9. python二级考time库吗_学python第十七节:time库的学习
  10. androidstuido_schooltest_1