- 浏览: 477279 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (288)
- Java (70)
- Web (11)
- JSP (18)
- JavaScript (25)
- JQuery (22)
- HTML (7)
- CSS (2)
- Struts2.X (6)
- Ibatis/Mybatis (6)
- Hibernate (4)
- Spring (8)
- Oracle (23)
- MySql (9)
- Apache (1)
- Tomcat (9)
- Weblogic (2)
- Maven (6)
- Flex (0)
- Junit (2)
- Test (1)
- SVN (6)
- GIS (3)
- Android (1)
- Eclipse (10)
- Thread (3)
- JVM (1)
- Cache (2)
- Design pattern (1)
- Nosql (3)
- Linux (10)
- Hudson/Jenkins (1)
- MQ (1)
- Network (2)
- 生活工作 (5)
- 架构师之路 (6)
- 知识精华荟萃 (9)
- Interview (13)
最新评论
-
276847139:
方法很有效,我的问题就在是在父项目的.classpa ...
手动添加Maven Dependencies -
coosummer:
推荐使用http://buttoncssgenerator.c ...
button css 样式 -
lqz2012:
DBFFileReader是外部框架里面的吧,不是JDK的。楼 ...
java读取dbf文件 -
xudongcsharp:
lx13345 写道java.lang.NoSuchMetho ...
Spring常用错误 -
lx13345:
jar是hibernate3.3GA,ehcache-1.5. ...
Spring常用错误
许多Java新人在看到下面的这段代码的时候,都会问一个问题:dealArray方法里那三个小点点是什么啊?
view plaincopy to clipboardprint?
public class TestVarArgus {
public static void dealArray(int... intArray){
}
public static void main(String args[]){
}
}
这就是今天这篇blog的主角:可变的参数类型,也称为不定参数类型。英文缩写是varargus,还原一下就是variable argument type。通过它的名字可以很直接地看出来,这个方法在接收参数的时候,个数是不定的。那么好,现在就先来调用下这个方法。请看代码和输出:
view plaincopy to clipboardprint?
public class TestVarArgus {
public static void dealArray(int... intArray){
for (int i : intArray)
System.out.print(i +" ");
System.out.println();
}
public static void main(String args[]){
dealArray();
dealArray(1);
dealArray(1, 2, 3);
}
}
输出:
view plaincopy to clipboardprint?
1
1 2 3
通过main方法里的调用,可以看出来这个可变参数既可以是没有参数(空参数),也可以是不定长的。看到这里估计都能明白,这个不定长的参数其实和数组参数挺像的。事实上,也确实是这么回事儿。编译器会在悄悄地把这最后一个形参转化为一个数组形参,并在编译出的class文件里作上一个记号,表明这是个实参个数可变的方法。请看代码:
view plaincopy to clipboardprint?
dealArray(); //dealArray(int[] intArray{});
dealArray(1); //dealArray(int[] intArray{1});
dealArray(1, 2, 3); //dealArray(int[] intArray{1, 2, 3});
说到这里,那么可以来验证一下,看看是不是这个可变参数就是数组类参数?看代码:
view plaincopy to clipboardprint?
public class TestVarArgus {
public static void dealArray(int... intArray){
for (int i : intArray)
System.out.print(i +" ");
System.out.println();
}
public static void dealArray(int[] intArray){//会有Duplicate method dealArray(int[]) in type TestVarArgus的错误
for (int i : intArray)
System.out.print(i +" ");
System.out.println();
}
public static void main(String args[]){
dealArray();
dealArray(1);
dealArray(1, 2, 3);
}
}
从上面这段代码可以看出,这两个方法是冲突的,是无法重载的。到这里,再来做一个有意思的实验:
view plaincopy to clipboardprint?
public class TestVarArgus {
public static void dealArray(int... intArray){
for (int i : intArray)
System.out.print(i +" ");
System.out.println();
}
public static void main(String args[]){
int[] intArray = {1, 2, 3};
dealArray(intArray); //通过编译,正常运行
}
}
view plaincopy to clipboardprint?
public class TestVarArgus {
public static void dealArray(int[] intArray){
for (int i : intArray)
System.out.print(i +" ");
System.out.println();
}
public static void main(String args[]){
dealArray(1, 2, 3); //编译错误
}
}
从上面这两段代码可以看出来,可变参数是兼容数组类参数的,但是数组类参数却无法兼容可变参数。其实对于第二段代码而言,编译器并不知道什么可变不可变,在它看来,需要定义一个dealArray(int, int, int)类的方法。所以,自然就无法去匹配数组类参数的dealArray方法了。
写不完了,吃完午饭,下午继续...
吃好午饭,睡了一会儿,继续上午的话题,接下来谈一下Java的可变参数。
既然Java方法接收可变参数,那么接下来我们再来看一下下面的代码:
view plaincopy to clipboardprint?
public class TestVarArgus {
public static void dealArray(int count, int... intArray){
}
public static void dealArray(int... intArray, int count){//编译报错,可变参数类型应该作为参数列表的最后一项
}
public static void main(String args[]){
}
}
这段代码说明了,可变参数类型必须作为参数列表的最后一项,而不能放在定长参数的前面。估计你会想到一个词“优先级”。因为没有确切的说明,只是这样一种规定,这里可以借用“优先级”这个词来理解一下,请看下面的代码:
view plaincopy to clipboardprint?
public class TestVarArgus {
public static void dealArray(int... intArray){
System.out.println("1");
}
public static void dealArray(int count, int count2){
System.out.println("2");
}
public static void main(String args[]){
dealArray(1, 2);
}
}
代码贴出来估计都知道是输出2,而不是1。记住:能匹配定长的方法,那么优先匹配该方法。含有不定参数的那个重载方法是最后被选中的。
最后,大家都知道main方法的参数就是一个数组类型的,那么它其实也是可以改成不定参数类型。试一试吧,看看有没有编译错误。
原文出自:http://blog.csdn.net/justinavril/archive/2009/10/15/4674305.aspx
view plaincopy to clipboardprint?
public class TestVarArgus {
public static void dealArray(int... intArray){
}
public static void main(String args[]){
}
}
这就是今天这篇blog的主角:可变的参数类型,也称为不定参数类型。英文缩写是varargus,还原一下就是variable argument type。通过它的名字可以很直接地看出来,这个方法在接收参数的时候,个数是不定的。那么好,现在就先来调用下这个方法。请看代码和输出:
view plaincopy to clipboardprint?
public class TestVarArgus {
public static void dealArray(int... intArray){
for (int i : intArray)
System.out.print(i +" ");
System.out.println();
}
public static void main(String args[]){
dealArray();
dealArray(1);
dealArray(1, 2, 3);
}
}
输出:
view plaincopy to clipboardprint?
1
1 2 3
通过main方法里的调用,可以看出来这个可变参数既可以是没有参数(空参数),也可以是不定长的。看到这里估计都能明白,这个不定长的参数其实和数组参数挺像的。事实上,也确实是这么回事儿。编译器会在悄悄地把这最后一个形参转化为一个数组形参,并在编译出的class文件里作上一个记号,表明这是个实参个数可变的方法。请看代码:
view plaincopy to clipboardprint?
dealArray(); //dealArray(int[] intArray{});
dealArray(1); //dealArray(int[] intArray{1});
dealArray(1, 2, 3); //dealArray(int[] intArray{1, 2, 3});
说到这里,那么可以来验证一下,看看是不是这个可变参数就是数组类参数?看代码:
view plaincopy to clipboardprint?
public class TestVarArgus {
public static void dealArray(int... intArray){
for (int i : intArray)
System.out.print(i +" ");
System.out.println();
}
public static void dealArray(int[] intArray){//会有Duplicate method dealArray(int[]) in type TestVarArgus的错误
for (int i : intArray)
System.out.print(i +" ");
System.out.println();
}
public static void main(String args[]){
dealArray();
dealArray(1);
dealArray(1, 2, 3);
}
}
从上面这段代码可以看出,这两个方法是冲突的,是无法重载的。到这里,再来做一个有意思的实验:
view plaincopy to clipboardprint?
public class TestVarArgus {
public static void dealArray(int... intArray){
for (int i : intArray)
System.out.print(i +" ");
System.out.println();
}
public static void main(String args[]){
int[] intArray = {1, 2, 3};
dealArray(intArray); //通过编译,正常运行
}
}
view plaincopy to clipboardprint?
public class TestVarArgus {
public static void dealArray(int[] intArray){
for (int i : intArray)
System.out.print(i +" ");
System.out.println();
}
public static void main(String args[]){
dealArray(1, 2, 3); //编译错误
}
}
从上面这两段代码可以看出来,可变参数是兼容数组类参数的,但是数组类参数却无法兼容可变参数。其实对于第二段代码而言,编译器并不知道什么可变不可变,在它看来,需要定义一个dealArray(int, int, int)类的方法。所以,自然就无法去匹配数组类参数的dealArray方法了。
写不完了,吃完午饭,下午继续...
吃好午饭,睡了一会儿,继续上午的话题,接下来谈一下Java的可变参数。
既然Java方法接收可变参数,那么接下来我们再来看一下下面的代码:
view plaincopy to clipboardprint?
public class TestVarArgus {
public static void dealArray(int count, int... intArray){
}
public static void dealArray(int... intArray, int count){//编译报错,可变参数类型应该作为参数列表的最后一项
}
public static void main(String args[]){
}
}
这段代码说明了,可变参数类型必须作为参数列表的最后一项,而不能放在定长参数的前面。估计你会想到一个词“优先级”。因为没有确切的说明,只是这样一种规定,这里可以借用“优先级”这个词来理解一下,请看下面的代码:
view plaincopy to clipboardprint?
public class TestVarArgus {
public static void dealArray(int... intArray){
System.out.println("1");
}
public static void dealArray(int count, int count2){
System.out.println("2");
}
public static void main(String args[]){
dealArray(1, 2);
}
}
代码贴出来估计都知道是输出2,而不是1。记住:能匹配定长的方法,那么优先匹配该方法。含有不定参数的那个重载方法是最后被选中的。
最后,大家都知道main方法的参数就是一个数组类型的,那么它其实也是可以改成不定参数类型。试一试吧,看看有没有编译错误。
原文出自:http://blog.csdn.net/justinavril/archive/2009/10/15/4674305.aspx
发表评论
-
常见eclipse环境编译问题小结
2015-07-08 21:46 697Preferences-Installed JRES-jdk ... -
URLEncode
2014-12-29 18:53 946前言: 根据HTTP协议要求,传递参数的值中如果存在特殊字符( ... -
java日期格式小时制区别
2014-12-29 18:29 748SimpleDateFormat ss = new Sim ... -
opencsv
2014-11-11 15:50 906public class CSVDemo { publ ... -
密码学-加密解密 加签验签
2014-08-21 21:37 8887RSA: 1. 加签:用私钥加 ... -
eclipse常用插件
2014-07-27 20:49 7001 velocity 模板编辑插件 实用 http://pro ... -
互联网开发
2014-04-29 19:17 21181.设计数据库时,有时候会根据业务,为了避免表中出现冗余的字 ... -
Servlet Listener
2014-03-26 17:35 1333Listener功能 它是基于观 ... -
数据库事务
2014-03-22 09:56 810数据库事务(Database Transa ... -
java 堆与栈
2014-03-21 16:54 733栈(stack):主要保存基本类型(或者叫内置类型)(char ... -
String、StringBuilder、StringBuffer区别
2014-03-21 16:24 712String 字符串常量,不可变 StringBuffer 字 ... -
数字证书
2014-03-18 17:20 776http://blog.csdn.net/zhulinfeib ... -
fish
2014-03-18 16:48 0互联网和企业应用最大的区别在于表现层的以及业务的复杂性上面。这 ... -
系统代码基本规范
2014-03-13 22:41 0系统代码基本规范 排 ... -
try catch return
2014-03-11 16:22 746package com.java.test; impor ... -
PO/POJO/VO/BO/DAO/DTO
2013-12-26 17:12 784PO(persistant object) 持久对 ... -
servlet
2013-12-21 17:47 702用Servlet获取URL地址。在HttpServletReq ... -
native2ascii
2013-12-16 15:42 754>native2ascii 中国 \u4e2d\u5 ... -
xStream 框架
2013-12-10 15:31 768http://www.cnblogs.com/hoojo/a ... -
Bat命令学习
2013-08-22 17:33 1570基础部分: 一、基础语法: 1.批处理文件是一个“. ...
相关推荐
10.java可变参数.zip10.java可变参数.zip10.java可变参数.zip10.java可变参数.zip10.java可变参数.zip10.java可变参数.zip10.java可变参数.zip10.java可变参数.zip10.java可变参数.zip10.java可变参数.zip10.java可...
Java中的可变参数(Varargs)是一种语法特性,允许开发者定义接受不定数量参数的方法。这在实际开发中非常有用,特别是在实现方法重载或者想要简化代码时。可变参数在Java中自J2SE 1.5版本起被引入。在可变参数方法...
Java 可变参数是指在方法中可以传递同类型的可变参数,JDK 1.5 开始支持这种特性。可变参数可以使得方法更加灵活、方便使用。可变参数的使用规则包括:可以不写参数,即传入空参;可以直接在里边写入参数,参数间用...
Java中的可变参数(Variable Arguments)是编程中一个便利的功能,允许我们在方法声明时定义一个可以接受任意数量相同类型参数的参数列表。这种特性在处理不确定数量输入时非常有用,比如函数式编程中的高阶函数。 ...
Java 类和对象是编程语言的基础,而可变参数(Variable Argument)是 Java 为了解决方法接收不定数量参数的问题引入的一个特性。这个特性允许我们创建一个方法,它能接受一个可变数量的参数,而不是固定数量。这在...
Java可变参数是Java语言中一个非常实用的特性,它允许方法接受数量可变的参数。这个特性在Java 5中被引入,极大地提高了代码的灵活性和可读性。下面我们将详细探讨Java可变参数的概念、用法以及背后的实现原理。 ##...
本文将探讨一个共同的话题——如何在C和Java中定义可变参数列表的函数。可变参数列表,也称为不定参数或可变参数,允许函数接受不同数量的参数,增加了代码的灵活性。 在C语言中,可变参数列表的实现依赖于`stdarg....
在Java编程语言中,可变参数(Varargs)是一种特殊的参数形式,允许一个方法接受任意数量的同类型参数。这种特性使得方法能够更加灵活地处理不同数量的输入数据。 #### 代码示例分析 考虑下面这段代码: ```java ...
在这个名为"Java可变参数demo"的示例中,开发者通过分析Android蓝牙框架层的源码,对Java的可变参数有了更深入的理解,并编写了一个小的演示程序以备后用。下面我们将详细探讨Java可变参数的相关知识点。 1. 可变...
总之,Java可变参数简化了处理可变数量参数的方法定义和调用,使得代码更加简洁,同时也保留了数组的灵活性。在实际开发中,尤其是在需要处理命令行参数、集合数据等场景下,可变参数是一个非常实用的特性。
本文将深入探讨Java中方法参数的传递机制,帮助开发者更好地理解这一核心概念。 1. 参数传递方式 Java中,方法参数的传递主要有两种方式:值传递(Pass by Value)和引用传递(Pass by Reference)。不过,Java并...
Java中的可变长参数(Varargs)是一种非常实用的语言特性,它允许我们在定义方法时接受一个不定数量的参数。这种特性使得我们无需为每个可能的参数组合定义单独的方法,简化了代码并提高了代码的可读性和灵活性。...
Java中的可变参数(Variable Argument)是Java 5引入的一项特性,它允许我们在定义方法时,接受数量可变的参数。这种机制使得方法调用更加灵活,尤其在处理不确定参数个数的情况时,大大简化了代码。下面我们将深入...
Java中的可变参数是一种特殊的参数类型,允许在方法中传递可变数量的参数。下面是Java中的可变参数常见用法实例总结: 一、可变参数的概念 在J2SE 1.4之前,Java中无法定义实参个数可变的方法,因为Java要求实参和...
在本文中,我们将介绍Kotlin传递可变长参数给Java可变参数实例代码的实现方法。 Java可变参数方法 ---------------- 在Java中,我们可以使用可变参数来定义方法,例如: ```java public class CallJavaUtils { ...
下面我们将深入探讨Java可变参数的工作原理、语法以及如何在实际项目中应用。 1. 可变参数的语法: 可变参数的声明方式是在参数类型后面加上三个点(...)。例如,以下是一个简单的可变参数方法,用于计算整数之和...
Java的可变参数列表(Variable Argument List),也称为varargs,是自Java 5引入的一项特性,它允许方法接受一个可变数量的参数。这种机制使得编写接受任意数量相同类型参数的方法变得更加方便。在使用可变参数时,...
Java可变参数(Varargs)是一种语言特性,允许方法接受可变数量的参数。在方法声明中使用省略号(...) 表示,可以将不定数量的参数传递给方法。可变参数使得方法更加灵活,可以接受任意数量的参数,并以数组形式访问...
Java中的可变参数类型是一种非常实用的特性,它允许我们在定义方法时接受任意数量的同类型参数。这个特性从Java 5开始引入,极大地增强了代码的灵活性和可读性。可变参数通常以"..."(三个点)的形式出现在参数列表...
然而,对于不可变对象,如Java中的String,情况有所不同。尽管String是对象,但一旦创建,其内容就不能改变。在示例代码中: ```java public void simpleChangeString(String original) { original = original + ...