- 浏览: 190154 次
- 性别:
- 来自: 上海
文章分类
最新评论
在调用某个方法时,若是方法的参数个数事先无法确定该如何处理?例如System.out.printf()方法中并没有办法事先决定要给的参数个数,像是:
?123 System.out.printf("%d",10);System.out.printf("%d %d", 10, 20);System.out.printf("%d %d %d", 10, 20, 30);
在J2SE 5.0之后开始支持不定长度参数(Variable-length Argument),这可以让您轻松的解决这个问题,直接来看下面的范例:
?MathTool.java 123456789 public class MathTool { public static int sum(int ... nums ) { //使用…声明参数 int sum = 0; for(int num : nums) { sum += num; } return sum; }}
要使用不定长度参数,在声明参数行时要在类型关键词后加上…,而在sum()方法的区块中可以看到,实际上nums是一个数组,编译器会将参数行的(int … nums)解释为(int[] nums),可以以下范例的方式制定各种长度的参数给方法来使用。
?TestVarargs.java 0102030405060708091011121314 public class TestVarargs { public static void main(String[] args) { int sum = 0; sum = MathTool.sum(1, 2); System.out.println("1 + 2 = " + sum); sum = MathTool.sum(1, 2, 3); System.out.println("1 + 2 +3 = " + sum); sum = MathTool.sum(1, 2, 3, 4, 5); System.out.println("1 + 2 + 3 + 4 + 5 = " + sum); }}
执行结果:
1 + 2 = 3
1 + 2 +3 = 6
1 + 2 + 3 + 4 + 5 = 15
编译器会将传递给方法的参数解释为int数组传入至sum()中,所以实际上不定长度参数的功能也是自J2SE 5.0后所提供的编译蜜糖(Compiler Sugar)。
在方法上使用不定长度参数时,记得必须声明的参数必须设置在参数行的最后一个。例如下面的方式是合法的:
?123 public void someMethod(int arg1, int arg2, int ... varargs) { // ...}
但下面的方式是不合法的:
?123 public void someMethod(int ... varargs , int arg1, int arg2) { // ...}
也无法使用两个以上的不定长度参数,例如下面的方式是不合法的:
?123 public void someMethod(int ... varargs1, int ... varargs2){ // …}
如果使用对象的不定长度参数,声明的方法相同。例如:
?123 public void someMethod(SomeClass… somes){ // …}
?123 System.out.printf("%d",10);System.out.printf("%d %d", 10, 20);System.out.printf("%d %d %d", 10, 20, 30);
在J2SE 5.0之后开始支持不定长度参数(Variable-length Argument),这可以让您轻松的解决这个问题,直接来看下面的范例:
?MathTool.java 123456789 public class MathTool { public static int sum(int ... nums ) { //使用…声明参数 int sum = 0; for(int num : nums) { sum += num; } return sum; }}
要使用不定长度参数,在声明参数行时要在类型关键词后加上…,而在sum()方法的区块中可以看到,实际上nums是一个数组,编译器会将参数行的(int … nums)解释为(int[] nums),可以以下范例的方式制定各种长度的参数给方法来使用。
?TestVarargs.java 0102030405060708091011121314 public class TestVarargs { public static void main(String[] args) { int sum = 0; sum = MathTool.sum(1, 2); System.out.println("1 + 2 = " + sum); sum = MathTool.sum(1, 2, 3); System.out.println("1 + 2 +3 = " + sum); sum = MathTool.sum(1, 2, 3, 4, 5); System.out.println("1 + 2 + 3 + 4 + 5 = " + sum); }}
执行结果:
1 + 2 = 3
1 + 2 +3 = 6
1 + 2 + 3 + 4 + 5 = 15
编译器会将传递给方法的参数解释为int数组传入至sum()中,所以实际上不定长度参数的功能也是自J2SE 5.0后所提供的编译蜜糖(Compiler Sugar)。
在方法上使用不定长度参数时,记得必须声明的参数必须设置在参数行的最后一个。例如下面的方式是合法的:
?123 public void someMethod(int arg1, int arg2, int ... varargs) { // ...}
但下面的方式是不合法的:
?123 public void someMethod(int ... varargs , int arg1, int arg2) { // ...}
也无法使用两个以上的不定长度参数,例如下面的方式是不合法的:
?123 public void someMethod(int ... varargs1, int ... varargs2){ // …}
如果使用对象的不定长度参数,声明的方法相同。例如:
?123 public void someMethod(SomeClass… somes){ // …}
发表评论
-
ReentrantLock与Condition
2017-03-17 14:25 532多线程和并发性并不是什么新内容,但是 Java 语言设计中的创 ... -
java linux监控
2017-03-13 17:49 502http://agapple.iteye.com/blog/1 ... -
transient和volatile两个关键字
2017-02-16 09:47 576transient和volatile两个关 ... -
java 锁机制
2016-12-09 13:43 481一段synchronized的代码被 ... -
java 正则表达式
2016-12-02 10:28 523众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字 ... -
java ClassNotFoundException和NoClassDefFoundException的差别
2016-08-17 19:47 912首先从名字上可以看出一类是异常,一类属于错误。异常可以通过异常 ... -
ThreadLocal
2016-07-19 11:10 335ThreadLocal是什么 Thre ... -
java CAS
2016-07-10 14:55 347cas 乐观锁每次不锁定整个线程,在操作之前进行判断。悲观锁独 ... -
concurrenthashmap
2016-07-10 11:11 425hash table虽然性能上不如 ... -
java 线程池的使用
2016-07-10 09:52 3771. 引言 合理利用线程池能够带来三个好处。第一:降低资源消 ... -
java.util.concurrent
2016-07-03 16:24 413我们都知道,在JDK1.5之 ... -
JVM 配置 以及垃圾收集器的选择
2016-04-15 12:36 735JVM监控的关键指标说明: a) FGC的环比增加次数。Zab ... -
jvm实时监控工具
2016-04-09 09:35 470 -
哈希 、一致性哈希、余数式哈希
2016-04-07 16:10 869什么是Hash Hash,一 ... -
jvm dump 相关
2016-03-22 17:22 684http://www.cnblogs.com/edwardla ... -
深入剖析volatile关键字
2016-03-21 16:02 552深入剖析volatile关键字 ... -
java线程安全问题之静态变量、实例变量、局部变量
2016-03-08 12:52 578java多线程编程中,存在很多线程安全问题,至于什么是线程安全 ... -
有状态的bean和无状态的bean的区别
2016-03-08 11:23 1526有状态会话bean :每个用户有自己特有的一个实例,在用户的生 ... -
Java nio详解
2016-01-20 16:30 557http://www.ibm.com/developerwor ... -
Java stack and heap dump
2015-11-14 16:13 1065对于大型 java 应用程序来说,再精细的测试都难以堵住所有的 ...
相关推荐
Java 中申请不定长度数组 ArrayList 的方法 Java 中申请不定长度数组 ArrayList 的方法是 Java 编程语言中一个非常重要的知识点。ArrayList 是 Java 中一种非常常用的集合类,它可以动态地增长或缩小,以适应不同的...
在Java编程中,对象的容纳主要分为两种方式:数组和容器。这里我们将详细讨论这两种方式。 **一、数组** 数组是一种基础的存储结构,它允许我们存储相同类型的对象引用。在Java中,数组的创建和使用可以通过以下...
在参数列表中使用“...”形式定义不定长参数,实际上这个不定长参数是一个数组,编译器会将(int...a)这种形式看作是(int[] a)的形式。 使用不定长参数的优点是可以提高代码的灵活性和可读性,例如,在数学运算中...
Java语言中的数组是一种重要的数据结构,它允许存储同类型的多个数据项。在Java程序设计教程(第6版)中,数组被深入地讲解,包括数组的创建、使用以及作为参数传递。 1. **数组作为参数**: - 在Java中,数组名...
可实现将C语言中的结构体转换为JAVA...目前有个难点是将枚举类型直接转换为JAVA中的枚举,这个目前还搞不定,如果有朋友知道怎么搞,欢迎来讨论指导。 demo中JAVA部分的开发工具使用的是eclipse,C部分使用的是VS2013。
* Java泛型与可变参数:Java泛型提供了类型安全的数据存储和操作方式,而可变参数则为方法传递不定数量的参数提供了便利。了解这些特性有助于编写更加通用、灵活的代码。 Java面向对象编程 Java面向对象编程是Java...
在Java中,可变长参数的本质是一个数组。当我们调用一个带有可变长参数的方法时,编译器会自动将传入的参数打包成一个数组传递给方法。例如,我们有一个接受可变长整数参数的方法: ```java public void print...
5. 栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定的回收。 数组、链表和集合都是数据结构中重要的概念,它们之间的区别在于存储方式、访问方式和应用场景。栈和堆是Java...
试题共分为判断题、不定项选择题两部分,旨在考察考生的 Java 编程基础知识和实际编程能力。 一、判断题 1. Java 语言具有较好的安全性和可移植性及与平台无关等特性。√ 该题考察 Java 语言的特性。Java 语言是...
- Java允许方法接收不定数量的参数,使用省略号`...`表示。 7. **数组简介** - 数组是一种存储相同类型元素的数据结构。 8. **一维数组的声明与初始化** - 定义数组的语法为:`数据类型[] 数组名 = new 数据...
综上所述,Java可变参数是Java语言中一个强大的特性,它简化了处理不定数量参数的方法定义,同时提供了良好的可读性和便利性。理解其工作原理和使用注意事项,可以帮助我们编写出更高效、更易于维护的代码。
与变长参数类似,但主要用于方法的参数列表中,提供了一种传递不定数量参数的方法。 ### Java 6新特性 #### 9. **并发工具类(Concurrent Utility Classes)** Java 6引入了`java.util.concurrent`包,提供了...
3. **可变参数**(Varargs):自Java 5起,开发者可以使用可变参数来简化方法调用,尤其是当需要传递数量不定的数组作为参数时。例如,`public void printNumbers(int... numbers) {...}` 这个方法可以接受任意数量...
可变参数是JDK 5.0的另一创新,它允许方法接收不定数量的参数,如Arrays.asList()方法。调用时,编译器会自动创建一个数组来存储这些参数。但是,可变参数必须作为方法参数列表的最后一个参数,并且一个方法只能有一...
- 方法可以接受不定数量的参数。 ##### 4. 自动装箱与拆箱 - 在基本类型与包装类之间自动转换。 ##### 5. 枚举类型 - 用于创建一组固定的常量。 ##### 6. 泛型 - 泛型提供了一种类型安全的集合类实现方式。 ####...
本课程从零开始,以通俗易懂的方式讲解Java入门,真正做到零基础入门学习,最适合初学者的教程!课程内容包括:1.数组简介2.数组基本用法3.动态赋值4.增强for循环5.练习:数组的用法6....不定长参数
Java中的可变长参数(Varargs)是一种非常实用的语言特性,它允许我们在定义方法时接受一个不定数量的参数。这种特性使得我们无需为每个可能的参数组合定义单独的方法,简化了代码并提高了代码的可读性和灵活性。...
4. **变长参数**:通过`...`操作符,可以定义接受不定数量参数的方法,增强了函数的灵活性。 5. **for-each循环**:简化了遍历数组和集合的代码,减少了迭代器的使用。 6. **注解(Annotations)**:注解为元数据...
此外,可变参数(varargs)在方法声明中允许接收不定数量的参数,这些参数在内部会被封装为一个数组。 总之,理解并熟练掌握Java中的标识符规则、数据类型转换、数组操作、面向对象编程的概念以及相关的编程技巧,...
Java 5之后引入了可变参数的概念,允许方法接受数量不定的参数。例如: ``` public void print(int... numbers) { for (int num : numbers) { System.out.println(num); } } ``` - **命令行参数** Java...