`
ihuashao
  • 浏览: 4547056 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Java方法的可变参数类型

阅读更多

许多Java新人在看到下面的这段代码的时候,都会问一个问题:dealArray方法里那三个小点点是什么啊?

这就是今天这篇blog的主角:可变的参数类型,也称为不定参数类型。英文缩写是varargus,还原一下就是variable argument type。通过它的名字可以很直接地看出来,这个方法在接收参数的时候,个数是不定的。那么好,现在就先来调用下这个方法。请看代码和输出:

输出:

通过main方法里的调用,可以看出来这个可变参数既可以是没有参数(空参数),也可以是不定长的。看到这里估计都能明白,这个不定长的参数其实和数组参数挺像的。事实上,也确实是这么回事儿。编译器会在悄悄地把这最后一个形参转化为一个数组形参,并在编译出的class文件里作上一个记号,表明这是个实参个数可变的方法。请看代码:

说到这里,那么可以来验证一下,看看是不是这个可变参数就是数组类参数?看代码:

从上面这段代码可以看出,这两个方法是冲突的,是无法重载的。到这里,再来做一个有意思的实验:

从上面这两段代码可以看出来,可变参数是兼容数组类参数的,但是数组类参数却无法兼容可变参数。其实对于第二段代码而言,编译器并不知道什么可变不可变,在它看来,需要定义一个dealArray(int, int, int)类的方法。所以,自然就无法去匹配数组类参数的dealArray方法了。

写不完了,吃完午饭,下午继续...

吃好午饭,睡了一会儿,继续上午的话题,接下来谈一下Java的可变参数。

既然Java方法接收可变参数,那么接下来我们再来看一下下面的代码:

这段代码说明了,可变参数类型必须作为参数列表的最后一项,而不能放在定长参数的前面。估计你会想到一个词“优先级”。因为没有确切的说明,只是这样一种规定,这里可以借用“优先级”这个词来理解一下,请看下面的代码:

代码贴出来估计都知道是输出2,而不是1。记住:能匹配定长的方法,那么优先匹配该方法。含有不定参数的那个重载方法是最后被选中的。

最后,大家都知道main方法的参数就是一个数组类型的,那么它其实也是可以改成不定参数类型。试一试吧,看看有没有编译错误。

分享到:
评论

相关推荐

    Java方法的可变参数类型实例分析

    主要介绍了Java方法的可变参数类型,通过实例对Java中的可变参数类型进行了较为深入的分析,需要的朋友可以参考下

    Java的可变参数讲解代码(使用方式、原理、结合泛型、使用元组或列表进行参数传递、 使用默认值、缓存计算结果、实战构建动态日志)

    Java可变参数(Varargs)是一种语言特性,允许方法接受可变数量的参数。在方法声明中使用省略号(...) 表示,可以将不定数量的参数传递给方法。可变参数使得方法更加灵活,可以接受任意数量的参数,并以数组形式访问...

    Java零基础-参数传递-2.md

    此外,我们还将介绍可变参数和返回值的使用方法。 能学到什么: 学习Java中方法调用时的参数传递方式。 理解基本类型和引用类型在参数传递过程中的特点和区别。 掌握可变参数的使用方法。 熟悉Java方法中返回值的...

    Java Varargs 可变参数用法详解

    定义实参个数可变的方法:只要在一个形参的”类型”与”参数名”之间加上三个连续的”.”(即”…”,英文里的句中省略号),就可以让它和不确定个实参相匹配。 以下实例创建了 sumvarargs() 方法来统计所有数字的值...

    Java复习大纲面试题.doc

    方法重载(Overload):是指方法名字相同,参数的个数、类型、次序不同。 方法重写(Override/Overwrite):是指子类重写了从父类继承过来的方法。 区别:方法重载没有继承、属于一种静态联编技术。 方法重写有继承、属于...

    Python 函数的参数-在函数内部使用方法修改可变参数会影响外部实参

    Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。 Python还被语言流行指数的编译器Tiobe将它被评为最受欢迎的编程语言,20多年来首次将Python置于...

    Java OOP.mmap

    目录: 一、Java 概述 1. Java体系 2. 常用的DOS命令 3. JDK、JRE、跨平台、Java平台 4. Java代码的编写执行过程 ...7. Java中的数据类型 ...8. Java中的常量 ...2. 数据类型和常量 ...6. 可变参数列表

    Java基础知识点.html

    类加载器 ClassLoader 反射 Stream 流 函数式编程 Lambda 表达式 网络编程-协议 网络编程-端口 网络编程-IP 多线程 IO流-字节流 IO流-字符流 IO流-转换流 File Map HashMap 序列化和反序列化 可变参数 类型通配符 ...

    Java核心编程技术源码

    Java高级特性:反射、泛型、注释符、自动装箱和拆箱、枚举类、可变参数、可变返回类型、增强循环、静态导入。随书附赠光盘内容为《Java高手真经(编程基础卷):Java核心编程技术》各种原型包、系统源程序。《Java高手...

    java中的泛型-详细

    Java中的泛型 JDK1.5 令我们期待很久,可是当他发布的时候却更换版本号为5.0。...而泛型也是一样的,这样写class Java_Generics,V>,这里边的K和V就象方法中的参数str1和str2,也是可变。下面看看例子:

    java学习笔记-java思维导图流程图表格整理

    可变参数 23 递归 24 Java数组 25 数组声明创建 25 三种初始化 25 静态初始化 26 动态初始化 26 默认初始化 26 数组的四个基本特点 27 二维数组 27 Arrays类 28 稀疏数组 29 面向对象编程 32 值传递和引用传递 33 ...

    Thinking in java4(中文高清版)-java的'圣经'

    非静态实例初始化 5.8 数组初始化 5.8.1 可变参数列表 5.9 枚举类型 5.10 总结 第6章 访问权限控制 第7章 复用类 第8章 多态 第9章 接口 第10章 内部类 第11章 持有对象 第12章 通过异常处理错误 第13章 字符串 第...

    JAVA上百实例源码以及开源项目

     在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...

    java基础常识与概念

    基础概念与常识 Java 语言有哪些特点?...什么是可变长参数? 基本数据类型 Java 中的几种基本数据类型了解么? 基本类型和包装类型的区别? 包装类型的缓存机制了解么? 自动装箱与拆箱了解吗?原理是什么?

    Java基础知识点总结.docx

    可变参数(...) 86 枚举:关键字 enum 86 自动拆装箱 86 泛型 87 <java.lang>System 89 <java.lang>Runtime 90 <java.lang>Math 90 <java.lang>.Date:日期类,月份从0—11 92 <java.lang> Calendar:日历类 93 ...

    JAVA上百实例源码以及开源项目源代码

     在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息的内容。同时一个mail note将被发送给消息发送者,发送一个e-mail通知给由recipient参数确定的e-...

    java笔记.docx

    Java中的字符串是不可变的,可以通过加号进行连接操作。 Java中的条件语句使用关键字if-else实现,也可以使用switch语句。 Java中的循环语句有for、while和do-while。 Java中的方法可以接受参数并返回值。 Java中的...

    JAVA面试题最全集

    1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入bbbwlirbbb,输出...

    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 ...

Global site tag (gtag.js) - Google Analytics