A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 武剑峰 中级黑马   /  2012-6-12 11:59  /  1659 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 武剑峰 于 2012-6-13 08:19 编辑

我定义了两个构造方法,一个是int,一个是int... args,然后创建对象传入int和int,int,发现结果如下
public class changeParameter {
/**
  * @param args
  */
public changeParameter(){}
public changeParameter(int a){
  System.out.println("调用了int 单个方法");
}
public changeParameter(int... args){
  System.out.println("调用了args方法");
}
public static void main(String[] args) {
  // TODO Auto-generated method stub
  new changeParameter(5);
  new changeParameter(5,65);
  
}
}
结果:
          调用了int 单个方法
          调用了args方法
是不是说在调用方法时优先选择精确的调用方法,只有在没有定义精确参数方法时才选择可变参数方法?

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 这是重载的另一种形式

查看全部评分

5 个回复

倒序浏览
是的,java本身有函数重载功能。

public changeParameter(int a){
  System.out.println("调用了int 单个方法");
}
public changeParameter(int... args){
  System.out.println("调用了args方法");
}
这里你定义了两个相同的函数,所以程序在运行的时候首先会调用最为匹配的函数。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
原则上是这样的,因为你的这个方法public changeParameter(int a)参数是固定的,而public changeParameter(int... args)参数是可变的,调用的时候首先
要寻找参数精确的固定的方法中是否含有需要的函数,然后再去寻找可变参数的方法
回复 使用道具 举报
当然了如果把你的程序改成这样

public class changeParameter
{
public changeParameter(int a){
  System.out.println("调用了int 单个方法");
}
public changeParameter(int... args){
  System.out.println("调用了args方法");
}
public static void main(String[] args) {
    new changeParameter(5);
  new changeParameter(5,65);
new changeParameter();    //他调用的还是public changeParameter(int... args)方法

  
}
}

你定义的那个(int...args)实际上是(int[] args)的一种简写格式,但如果要定义成(int[] args),你就得传一个数组了,new changeParameter(new int[]{1,2,34};而且数组形式的形参可以处于形参列表的任意位置,但个数可变的形参只能处于参数列表的最后了(int a,String...args),也就是说,一个方法里面最多只能定义一个长度可变的形参
回复 使用道具 举报
第一个方法定义参数是一个整型类型:public changeParameter(int a )   表示确定性,规定只能传一个int类型的参数。
第二个方法定义的参数虽说也是整型类型:public changeParameter(int... args),但是在参数里面(int... args)定义的参数就属于泛型类型的整型参数,表示不确定性,也就是说该方法可以传一个int参数,也可以传多个int参数。
回复 使用道具 举报
记住,在选择重载方法的时候 “加宽先于装箱执行” --〉“装箱先于var-arg执行”
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马