`
xfxlch
  • 浏览: 162300 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java中形参String的可变参数的定义(String...)

    博客分类:
  • Java
阅读更多

现在我们在编程的时候,经常会出现这样子一些方法:

public void paintReportChart(int i, String... args) {
        final String chartTitle;
        final String titleName;
        final String descX;
        final String descY;
//omit the code
		...
        chartpanel.updateUI();
        chartpanel.repaint();
	}
 

首先这是jdk1.5之后的新特性,我们叫它为可变参数,即 varargs 。之前我们定义可变参数是采用String[] args的方法来声明。jdk1.5之后有了更加简便的方式。
事实上String[] args 和 String... args 本质上不没有什么区别,String... args 最后还是转化成String[] args 来做的,只是String... args这种形式在应用上更加的灵活和简便。
例如有下面的两个方法:

public static void callMe1(String[] args) {
		System.out.println(args.getClass() == String[].class);
		for(String s : args) {
			System.out.println(s);
		}
	}
	
	public static void callMe2(String... args) {
		System.out.println(args.getClass() == String[].class);
	    for(String s : args) {
	    	System.out.println(s);
	    }
	}

 他们可以这样子被调用:

 

callMe1(new String[] {"a", "b", "c"});
callMe2("a", "b", "c");
callMe2(new String[] {"a", "b", "c"});
 但是不能
callMe1("a", "b", "c");

 这就是String... args定义方法的灵活之处。并且当一个方法定义中有String... args形参时,实参传递的参数个数可以是少于最大个数的任意个,可以不传 参数。

但是这样子定义在方便的同时也是要付出一定的代价的,那就是String...args只能定义在形参的最后一个参数,而String[] args就没有这样的限制了。所以我们在定义的时候也就各取所需了。

 

 

 

http://stackoverflow.com/questions/301563/difference-fnstring-args-vs-fnstring-args

http://www.java-forums.org/advanced-java/18769-string-arg-string-args.html

分享到:
评论

相关推荐

    C#教程(语言规范)

    4.2.3 string 类型.. 78 4.2.4 接口类型... 78 4.2.5 数组类型... 78 4.2.6 委托类型... 78 4.3 装箱和拆箱 79 4.3.1 装箱转换... 79 4.3.2 拆箱转换... 80 4.4 构造类型 .. 81 4.4.1 类型实参... 81 4.4.2...

    你必须知道的495个C语言问题(PDF)

    3.4 这是个巧妙的表达式: a ˆ= b ˆ= a ˆ= b 它不需要临时变量就可 以交换a 和b 的值。. . . . . . . . . . . . . . . . . . . . . . . . . 14 3.5 我可否用括号来强制执行我所需要的计算顺序? . . . . . . . . ....

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    在 java 语言中,Java 程序的基本单位是类,也就是说:一个 Java 程序是由多个类组成 的。定义一个类与定义一个数据类型是有区别的。在程序设计语言中,把定义数据类型的能 力作为一种很重要的能力来对待。在面向...

    day021-反射和注解笔记和代码.rar

    如果方法没有形参,则Class可变参数不用写 Method method = clazz.getDeclaredMethod(String methodName,Class... 参数字节码)根据方法名和参数类型获取指定的的方法 methodName:方法名 ...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    用C#的params关键字实现方法形参个数可变示例

    个人认为,提供params关键字以实现方法形参个数可变是C#语法的一大优点。在方法形参列表中,数组类型的参数前加params关键字,通常可以在调用方法时代码更加精练。 例如,下面代码: class Program { static void ...

    【04-面向对象(上)】

    •长度可变的形参只能位于最后一个参数,并一个方法里只能有一个可变长度的参数. 递归 •递归就是在方法中再次调用自己。 •递归一定要向已知方向递归. 方法的重载 •Java 允许在一个类里定义多个同名方法...

    java面试题

    答:String是不可变的对象,每次对String类型进行改变都相当于产生了一个新的对象,StringBuffer是可变的字符序列,所以如果要经常改变某个字符串的话建议使用StringBuffer。 list、set、map问题? 答:set 不允许...

    疯狂JAVA讲义

    5.2.3 形参长度可变的方法 120 5.2.4 递归方法 121 5.2.5 方法重载 123 学生提问:为什么方法的返回值类型不能用于区分重载的方法? 124 5.3 成员变量和局部变量 124 5.3.1 成员变量和局部变量 125 5.3.2 成员...

    【05-面向对象(下)】

    如果形参列表中只有一个参数,甚至连形参列表的圆括号也可以省略。  –箭头(->),必须通过英文等号和大于符号组成。  –代码块。如果代码块只有包含一条语句,Lambda表达式允许省略代码块的花括号,如果省略了...

    C++Primer(第5版 )中文版(美)李普曼等著.part2.rar

     16.4.1 编写可变参数函数模板 620  16.4.2 包扩展 621  16.4.3 转发参数包 622  16.5 模板特例化 624  小结 630  术语表 630  第Ⅳ部分 高级主题 633  第17章 标准库特殊设施 635  17.1 tuple类型 636  ...

    C++ Primer第四版【中文高清扫描版】.pdf

    3.2.1 string对象的定义和初始化 70 3.2.2 String对象的读写 71 3.2.3 string对象的操作 72 3.2.4 string对象中字符的处理 76 3.3 标准库vector类型 78 3.3.1 vector对象的定义和初始化 79 3.3.2 vector对象的操作 ...

    C#语言规范(4.0版本)

    10.5.3 可变字段 292 10.5.4 字段初始化 293 10.5.5 变量初始值设定项 293 10.5.5.1 静态字段初始化 294 10.5.5.2 实例字段初始化 295 10.6 方法 296 10.6.1 方法形参 298 10.6.1.1 值参数 299 10.6.1.2 引用形参 ...

    微软C#语言规范,C#语言教程中文版

    10.5.3 可变字段 292 10.5.4 字段初始化 293 10.5.5 变量初始值设定项 293 10.5.5.1 静态字段初始化 294 10.5.5.2 实例字段初始化 295 10.6 方法 296 10.6.1 方法形参 298 10.6.1.1 值参数 299 10.6.1.2 引用形参 ...

    C#语言规范4.0

    10.5.3 可变字段 292 10.5.4 字段初始化 293 10.5.5 变量初始值设定项 293 10.5.5.1 静态字段初始化 294 10.5.5.2 实例字段初始化 295 10.6 方法 296 10.6.1 方法形参 298 10.6.1.1 值参数 299 10.6.1.2 引用形参 ...

    C#语言规范(2.0,3.0,4.0合集)

    10.5.3 可变字段 292 10.5.4 字段初始化 293 10.5.5 变量初始值设定项 293 10.5.5.1 静态字段初始化 294 10.5.5.2 实例字段初始化 295 10.6 方法 296 10.6.1 方法形参 298 10.6.1.1 值参数 299 10.6.1.2 引用形参 ...

    C#_语言规范_4.0_中文版

    10.5.3 可变字段 292 10.5.4 字段初始化 293 10.5.5 变量初始值设定项 293 10.5.5.1 静态字段初始化 294 10.5.5.2 实例字段初始化 295 10.6 方法 296 10.6.1 方法形参 298 10.6.1.1 值参数 299 10.6.1.2 引用形参 ...

    C++ Primer中文版(第5版)李普曼 等著 pdf 1/3

     16.4.1 编写可变参数函数模板 620  16.4.2 包扩展 621  16.4.3 转发参数包 622  16.5 模板特例化 624  小结 630  术语表 630  第Ⅳ部分 高级主题 633  第17章 标准库特殊设施 635  17.1 tuple类型 636  ...

Global site tag (gtag.js) - Google Analytics