- 浏览: 437179 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (214)
- android (12)
- mina (5)
- JVM (3)
- Maven (4)
- memcached (3)
- 程序人生 (9)
- hibernate (6)
- mysql (7)
- socket (4)
- php (7)
- 游戏 (8)
- spring (6)
- java基础 (25)
- linux (6)
- sqlserver (3)
- cocos2d-x (24)
- c++ (4)
- webservice (3)
- protobuf (4)
- visio工具 (1)
- ibatis (2)
- 多线程 (2)
- 分布式 (0)
- C# (1)
- struts2 (5)
- seo (1)
- photoshop (1)
- tiles (1)
- jsp (5)
- 前端 (1)
- intellij (6)
- ibatis springmvc (1)
- oracle (3)
- android studio (4)
- spring-boot (2)
- 微信小程序 (2)
- jquery mobile (1)
- vue (3)
- git (1)
最新评论
-
springdata-jpa:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
An internal error occurred during: "Updating Maven Project". Unsupported I问题解决备忘 -
emilchan:
谢谢,刚好用上
bugfree 站点有端口号 上传图片不显示 -
seeYourEye:
3q 解决了
An internal error occurred during: "Updating Maven Project". Unsupported I问题解决备忘 -
gqlu:
0.9.1版本 太低了点吧。。。
cocos2d-x中保存用户游戏数据CCUserDefault -
宋建勇:
缺少代码啊
key.isAcceptable()时怎么处理的 ...
Java异步socket
许多Java新人在看到下面的这段代码的时候,都会问一个问题:dealArray方法里那三个小点点是什么啊?
- public class TestVarArgus {
- public static void dealArray(int... intArray){
- }
- public static void main(String args[]){
- }
- }
这就是今天这篇blog的主角:可变的参数类型,也称为不定参数类型。英文缩写是varargus,还原一下就是variable argument type。通过它的名字可以很直接地看出来,这个方法在接收参数的时候,个数是不定的。那么好,现在就先来调用下这个方法。请看代码和输出:
- 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);
- }
- }
输出:
- 1
- 1 2 3
通过main方法里的调用,可以看出来这个可变参数既可以是没有参数(空参数),也可以是不定长的。看到这里估计都能明白,这个不定长的参数其实和数组参数挺像的。事实上,也确实是这么回事儿。编译器会在悄悄地把这最后一个形参转化为一个数组形参,并在编译出的class文件里作上一个记号,表明这是个实参个数可变的方法。请看代码:
- dealArray(); //dealArray(int[] intArray{});
- dealArray(1); //dealArray(int[] intArray{1});
- dealArray(1, 2, 3); //dealArray(int[] intArray{1, 2, 3});
说到这里,那么可以来验证一下,看看是不是这个可变参数就是数组类参数?看代码:
- 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);
- }
- }
从上面这段代码可以看出,这两个方法是冲突的,是无法重载的。到这里,再来做一个有意思的实验:
- 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); //通过编译,正常运行
- }
- }
- 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方法接收可变参数,那么接下来我们再来看一下下面的代码:
- 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[]){
- }
- }
这段代码说明了,可变参数类型必须作为参数列表的最后一项,而不能放在定长参数的前面。估计你会想到一个词“优先级”。因为没有确切的说明,只是这样一种规定,这里可以借用“优先级”这个词来理解一下,请看下面的代码:
- 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方法的参数就是一个数组类型的,那么它其实也是可以改成不定参数类型。试一试吧,看看有没有编译错误。
发表评论
-
Java通过mysql-connector-java-8.0.11连接MySQL Server 8.0遇到的几个问题
2019-01-04 21:27 1847这次新安装了一个MySQL数据库,然后navicat连接数据 ... -
MySQL第二天早上第一次连接超时报错,解决方法com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:
2018-01-13 19:44 2141MySQL第二天早上第一次连接超时报错,解 ... -
用户登录安全:使用 Salt + Hash 来为密码加密
2017-09-21 13:43 2271我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个 ... -
java对cookie的读写操作
2014-12-16 13:59 691Java中如何读写cookie Java代码 ... -
CGLib动态代理原理及实现
2014-12-12 16:53 764JDK实现动态代理需要实 ... -
java动态代理(JDK和cglib)
2014-12-12 16:08 667JAVA的动态代理 代理模式 代理模式是常用的java设计模 ... -
使用 jfreechart 生成 曲线、柱状图、饼状图、分布图 展示到JSP
2014-09-11 15:05 1450虽然现在JS做报表和图 ... -
http请求后直接下载数据
2014-07-31 17:10 978@RequestMapping("/public ... -
Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:com
2014-07-28 20:28 2271not a JRE问题在使用pom.xml配置默认Goa ... -
ConcurrentModificationException异常解决办法
2014-07-27 18:59 803java.util.ConcurrentModificati ... -
java 加载properties 文件的多种方法
2014-07-02 11:41 648这里介绍两种技术:利 ... -
java 内存查看命令 jmap
2014-07-01 14:11 2269内存监控的方法: 1. jmap -heap pid ... -
java高级程序员常见面试知识
2014-06-26 10:20 8841、java 内存模型,GC 工作原理 2、java c ... -
10分钟教会你Apache Shiro
2014-06-05 14:22 894前言 欢迎来到Apache Shi ... -
java Swing 播放背景音乐
2014-02-22 19:38 5402import java.io.FileNotFoundEx ... -
Cannot return from outside a function or method
2014-02-10 21:03 894最近发现myeclipse10中有几处bug ... -
代码生成工具
2013-12-13 13:46 7771、http://code.google.com/p/mrd ... -
Java Date 和 Calendar
2013-10-12 14:02 770Java 语言的Date(日期),Calendar(日历), ... -
Eclipse启动时发生An internal error occurred during: "Initializing Java Tooling".错误的解决
2013-10-09 19:14 1242Eclipse启动时发生An internal erro ... -
Javolution 类库特性简述 -- 转载
2013-08-05 14:23 1876Javolution 实时目标是简单的:使你的应用程序更快 ...
相关推荐
Java 可变参数是指在方法中可以传递同类型的可变参数,JDK 1.5 开始支持这种特性。可变参数可以使得方法更加灵活、方便使用。可变参数的使用规则包括:可以不写参数,即传入空参;可以直接在里边写入参数,参数间用...
Java可变参数是Java语言中一个非常实用的特性,它允许方法接受数量可变的参数。这个特性在Java 5中被引入,极大地提高了代码的灵活性和可读性。下面我们将详细探讨Java可变参数的概念、用法以及背后的实现原理。 ##...
1. 在方法声明中,用三个点(...)跟随参数类型来定义可变参数。 2. 在方法内部,可变参数将被当作数组来处理。 以下是一个Java的可变参数示例: ```java public class VariadicExample { public static void ...
在这个名为"Java可变参数demo"的示例中,开发者通过分析Android蓝牙框架层的源码,对Java的可变参数有了更深入的理解,并编写了一个小的演示程序以备后用。下面我们将详细探讨Java可变参数的相关知识点。 1. 可变...
Java中的可变参数类型是一种非常实用的特性,它允许我们在定义方法时接受任意数量的同类型参数。这个特性从Java 5开始引入,极大地增强了代码的灵活性和可读性。可变参数通常以"..."(三个点)的形式出现在参数列表...
在Java编程语言中,可变参数(Varargs)是一种特殊的参数形式,允许一个方法接受任意数量的同类型参数。这种特性使得方法能够更加灵活地处理不同数量的输入数据。 #### 代码示例分析 考虑下面这段代码: ```java ...
Java可变参数(Varargs)是一种语言特性,允许方法接受可变数量的参数。在方法声明中使用省略号(...) 表示,可以将不定数量的参数传递给方法。可变参数使得方法更加灵活,可以接受任意数量的参数,并以数组形式访问...
在本文中,我们将介绍Kotlin传递可变长参数给Java可变参数实例代码的实现方法。 Java可变参数方法 ---------------- 在Java中,我们可以使用可变参数来定义方法,例如: ```java public class CallJavaUtils { ...
Java中的可变长参数(Varargs)是一种非常实用的语言特性,它允许我们在定义方法时接受一个不定数量的参数。这种特性使得我们无需为每个可能的参数组合定义单独的方法,简化了代码并提高了代码的可读性和灵活性。...
Java中的可变参数(Varargs)是一种语法特性,允许开发者定义接受不定数量参数的方法。这在实际开发中非常有用,特别是在实现方法重载或者想要简化代码时。可变参数在Java中自J2SE 1.5版本起被引入。在可变参数方法...
- **分析**:尽管 `str1` 是一个引用类型,但由于 `String` 类是不可变的,所以即使 `change` 方法尝试修改 `str2`,也只是创建了一个新的 `String` 对象,并未改变 `str1` 指向的对象。 #### 五、结论 - Java中的...
总之,Java可变参数简化了处理可变数量参数的方法定义和调用,使得代码更加简洁,同时也保留了数组的灵活性。在实际开发中,尤其是在需要处理命令行参数、集合数据等场景下,可变参数是一个非常实用的特性。
Java中的可变参数(Variable Argument)是Java 5引入的一项特性,它允许我们在定义方法时,接受数量可变的参数。这种机制使得方法调用更加灵活,尤其在处理不确定参数个数的情况时,大大简化了代码。下面我们将深入...
Java中的可变参数是一种特殊的参数类型,允许在方法中传递可变数量的参数。下面是Java中的可变参数常见用法实例总结: 一、可变参数的概念 在J2SE 1.4之前,Java中无法定义实参个数可变的方法,因为Java要求实参和...
Java 类和对象是编程语言的基础,而可变参数(Variable Argument)是 Java 为了解决方法接收不定数量参数的问题引入的一个特性。这个特性允许我们创建一个方法,它能接受一个可变数量的参数,而不是固定数量。这在...
Java中的可变参数(Variable Arguments)是编程中一个便利的功能,允许我们在方法声明时定义一个可以接受任意数量相同类型参数的参数列表。这种特性在处理不确定数量输入时非常有用,比如函数式编程中的高阶函数。 ...
Java可变参数当做数组处理的方法示例 Java可变参数当做数组处理的方法示例主要介绍了Java可变参数当做数组处理的相关原理、步骤与操作注意事项。本文将通过实例形式对Java可变参数当做数组处理的方法进行详细讲解,...
下面我们将深入探讨Java可变参数的工作原理、语法以及如何在实际项目中应用。 1. 可变参数的语法: 可变参数的声明方式是在参数类型后面加上三个点(...)。例如,以下是一个简单的可变参数方法,用于计算整数之和...
Java可变参数列表,也称为不定参数,是Java语言中的一种特性,允许方法接收数量可变的参数。这种特性在编程时提供了极大的灵活性,尤其是在处理不确定数量输入的情况下。以下是关于Java可变参数列表的详细解释。 1....
因为可变长参数不能紧跟在非可变参数之后。 在实际编程中,可变长参数常常用于简化函数调用,例如`Arrays.asList()`和`String.format()`等。在Java Web开发中,比如使用Servlet处理HTTP请求时,有时也需要使用可变...