java提供了可变参数的方法,即方法的参数个数可以不确定,用"..."定义。

import java.util.ArrayList;
import java.util.List; public class VariableParameter { //求若干个整型数中的最大值
public int getMax(int... items){ //定义可变参数items int max = Integer.MIN_VALUE; //次数为int能表示的最小值,值为-2147483648
for(int item : items){
max = item > max? item : max; //取大值
}
return max;
}
//返回比number大的数的个数
public int getLagerNum(int number,int... items){ //若除了可变长参数还有其它参数,可变长参数一定要放在最后
int sum = 0;
for(int item : items){
if(item > number){
sum++;
}
}
return sum;
} public static void main(String[] args) {
VariableParameter vp = new VariableParameter();
System.out.println("最大值:"+vp.getMax()); //可以不写参数
System.out.println("最大值:"+vp.getMax(2,1,4,7,2,-1,3,3)); //可以在参数中直接写入若干个参数
System.out.println("最大值:"+vp.getMax(-1,4,5,0,1)); //可以在参数中直接写入若干个参数 System.out.println("比number大的数的个数:"+vp.getLagerNum(9, 1,11,5,14,-1,9,21)); //9为number,后边的是items
int a[] = new int[] {1,11,5,14,-1,9,21};
System.out.println("比number大的数的个数:"+vp.getLagerNum(9,a)); //items也可以用数组替代 } }

运行结果如下:

最大值:-2147483648
最大值:7
最大值:5
比number大的数的个数:3
比number大的数的个数:3

从上面代码可以看出:

1.在方法中定义可变参数后,我们可以像操作数组一样操作该参数;

2.如果该方法除了可变参数还有其它的参数,可变参数必须放到最后;

3.调用使用了可变参数的方法时:

a.可以不写参数,即传入空参;

b.可以直接在里边写入参数,参数间用逗号隔开;

c.可以传入一个数组;

继续往下看:

public class VariableParameter {

    public void comp(int... items){
System.out.println("1");
} public void comp(int item1,int item2){
System.out.println("2");
} public static void main(String[] args) {
VariableParameter vp = new VariableParameter();
vp.comp(1, 2); } }

运行结果:

2

由此可以看出:

4.拥有可变参数的方法可以被重载,在被调用时,如果能匹配到参数定长的方法则优先调用参数定长的方法。

继续:

public class VariableParameter {

    public void comp(int... items){
System.out.println("1");
} public void comp(int[] items){ //会报错:Duplicate method comp(int[]) in type VariableParameter
System.out.println("2");
} public static void main(String[] args) { } }

当试图使用数组作为参数去实现重载时,会报错,说明可变参数与数组冲突,但是:

public class VariableParameter {

    public void comp(int[] items){      //会报错:Duplicate method comp(int[]) in type VariableParameter
System.out.println("2");
} public static void main(String[] args) {
VariableParameter vp = new VariableParameter();
vp.comp(1,2,3,4); //The method comp(int[]) in the type VariableParameter is not applicable for the arguments (int, int, int, int)
} }

如果定义一个参数为数组的方法,像调用可变参数的方法一样调用它是会报错,说明可变参数并不是一个数组,由此我们可以总结出:

5:可变参数可以兼容数组参数,但数组参数无法兼容可变参数。



版权声明:本文为博主原创文章,未经博主允许不得转载。

巩固java(六)----java中可变参数方法(非常实用哦)的更多相关文章

  1. java 使用反射调用可变参数方法

    使用反射操作对象-调用可变参数方法 要把可变参数都当做是其对应的数组类型参数; 如 show(XX... is)作为show(XX[] is)调用; 若可变参数元素类型是引用类型: JDK内部接收到参 ...

  2. C# 中的可变参数方法(VarArgs)

    首先需要明确一点:这里提到的可变参数方法,指的是具有 CallingConventions.VarArgs 调用约定的方法,而不是包含 params 参数的方法.可以通过MethodBase.Call ...

  3. Java 中可变参数

    可变参数 Java 中可变参数 现在需要编写一个求和的功能,但是不知道有几个参数,在调用的时候才知道有几个参数,请问这如何实现呢? Java 给我们提供了一个 JDK 1.5 的新特性---可变参数 ...

  4. 编写Java程序,通过给定可变参数方法,计算任意给定的多个int类型数据之和

    返回本章节 返回作业目录 需求说明: 通过给定可变参数方法,计算任意给定的多个int类型数据之和. 实现思路: 定义可变形参方法,参数类型是int类型. 定义变量 sum 接受最终的和. 通过 for ...

  5. Java 8 接口中的默认方法与静态方法

    Java 8 接口中的默认方法与静态方法 1. 接口中的默认方法 允许接口中包含具有具体实现的方法,该方法称"默认方法",默认方法使用用 default 关键字修饰. public ...

  6. java基础-java与c#的可变参数

    正文 可变参数,必须最为参数的最后一个参数:可变参数只能有一个: c#可变参数例子:       class Program { static void Main(string[] args) { T ...

  7. java获取request中的参数、java解析URL问号后的参数

    java获取request中的参数.java解析URL问号后的参数.有时候我们需要从request中获取参数,或者获取拼接在Url后面的参数,有时候一个一个去拿有点麻烦,一起拿出来放在一个map里面需 ...

  8. 2017.10.28 针对Java Web应用中错误异常处理方法的运用

    针对Java Web应用中错误异常处理方法的运用 在javaweb中其异常都需要对Checked Exception之下的Exception进行继承,并且有选择地对发生的错误和异常进行处理.Java同 ...

  9. java.nio.Buffer 中的 flip()方法

    在Java NIO编程中,对缓冲区操作常常需要使用  java.nio.Buffer中的 flip()方法. Buffer 中的 flip() 方法涉及到 Buffer 中的capacity.posi ...

随机推荐

  1. 内核调试神器SystemTap — 更多功能与原理(三)

    a linux trace/probe tool. 官网:https://sourceware.org/systemtap/ 用户空间 SystemTap探测用户空间程序需要utrace的支持,3.5 ...

  2. rails中validates_confirmation_of验证方法无效的解决办法

    rails的model中提供了很多种自带的验证方法,validates_confirmation_of可以验证变量xxx和xxx_confirmation是否相等:这可以用于验证2遍输入的密码是否一致 ...

  3. Salesforce的数据权限机制

    本文主要介绍了 Salesforce 对于系统中数据的访问控制是如何设计的,然后也了解了下 Alfresco 和 Oracle VPD 的数据权限机制.希望对一些业务系统的数据权限的访问控制设计能有所 ...

  4. Windows平台安装及配置Hadoop(不借助cygwin)

    由于项目需要,我在VMware上装了几个虚拟机Windows server 2012 R2,并要搭建Hadoop集群.刚刚入门hadoop,一头雾水,然后开始搜各种教程,首先是选用cygwin进行安装 ...

  5. nodejs实现最简单的爬虫

    本文将以抓取百度搜索结果中关键词的相关搜索为例子,教会大家以nodejs制作最简单的爬虫:  开始之前呢,先来个公众号求粉:      将使用的node模块及属性介绍:   request:     ...

  6. 获取redis主从复制链SHELL脚本

    获取redis主从复制链SHELL脚本 vi redisnode.sh #!/bin/sh master_host=$ master_port=$ auth=$ #判断输入密码是否为空,为空则转化为' ...

  7. Spark学习笔记

    Map-Reduce 我认为上图代表着MapReduce不仅仅包括Map和Reduce两个步骤这么简单,还有两个隐含步骤没有明确,全部步骤包括:切片.转换.聚合.叠加,按照实际的运算场景上述步骤可以简 ...

  8. JS中sessionstorage的getItem/setItem/removeItem/clear

    function people(){ } var animal = { name: "cc", age:16, say:function(m1,m2){ alert("他 ...

  9. 学习MySQL我们应该知道哪些东西?

    随笔:小编由于年前一直在找工作,而年后找到工作后又一直在忙工作,所以也很少有时间给大家写点什么,总的来说呢,回顾一下之前面试的几次经历,也曾小小的总结了一下自己的不足,发现自己虽然一直在原有的公司(外 ...

  10. Node笔记五-进程、线程

    进程 -每一个正在运行的应用程序都称之为进程 -每一个应用程序都至少有一个进程 -进程是用来给应用程序提供一个运行的环境 -进程是操作系统为应用程序分配资源的一个单位线程 -用来执行应用程序中的代码 ...