文档章节

java基础---->可变参数

小强斋太
 小强斋太
发布于 2016/11/09 20:06
字数 709
阅读 1
收藏 0

Java1.5增加了新特性:可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。注意:可变参数必须位于最后一项。当可变参数个数多余一个时,必将有一个不是最后一项,所以只支持有一个可变参数。因为参数个数不定,所以当其后边还有相同类型参数时,java无法区分传入的参数属于前一个可变参数还是后边的参数,所以只能让可变参数位于最后一项。

可变参数的特点:

(1)只能出现在参数列表的最后; 

(2)...位于变量类型和变量名之间,前后有无空格都可以;

(3)调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中一数组的形式访问可变参数。

public class Varable {
 public static void main(String [] args){
  System.out.println(add(2,3));
  System.out.println(add(2,3,5));
 }
 public static int add(int x,int ...args){
  int sum=x;
  for(int i=0;i<args.length;i++){
   sum+=args[i];
  }
  return sum;
 }
}

然而,使用可变参数时,要注意几个问题:

1) 可变参数方法与数组参数方法重载时

//带数组参数的方法
	public void hello(String[] params) {
		System.out.println("执行带数组参数的方法,数组长度为:" + params.length);
	}

	//带可变参数的方法
	public static void hello(String... params) {
		System.out.println("执行带可变参数的方法,参数个数为:" + params.length);
	}

编译错误:Duplicate method hello(String[])

2)可变参数方法与无参数方法重载时

//带可变参数的方法
	public static void hello(String... params) {
		System.out.println("执行带可变参数的方法,参数个数为:" + params.length);
	}

	//不带参数的方法
	public static void hello() {
		System.out.println("执行不带参数的方法");
	}

	public static void main(String[] args) {
		hello(); //执行不带参数的方法
	}

3)重载情况三:可变参数的类型和前面非可变参数类型一样

// 带可变参数的方法
	public static void hello(String... params) {
		System.out.println("执行带可变参数的方法,参数个数为:" + params.length);
	}

	// 带固定参数和可变参数
	public void hello(String param1, String... params) {
		System.out.println("执行带固定参数和可变参数的方法,参数个数为:" + params.length);
	}

当用一下代码调用时,下面代码所在行报编译出错The method hello(String[]) is ambiguous

hello("1", "2", "3");

4) 可变参数方法与可变参数方法重载时

static void f(float i, Character... args) {
		System.out.println("first");
	}

	static void f(Character... args) {
		System.out.print("second");
	}

当用下面代码时候

f(1,'2');

没有问题

但当用下面代码调用时

f('1','2');

该行代码报编译错误The method f(float, Character[]) is ambiguous

基本类型由低级到高级分别为 (byte,short,char)--int--long--float--double,低级变量可以直接转换为高级变量,

 


 

 


 

 

本文转载自:http://www.cnblogs.com/xqzt/archive/2012/07/27/5637280.html

共有 人打赏支持
小强斋太
粉丝 0
博文 181
码字总数 0
作品 0
广州
你所需要的java提升篇大总结

java基础篇深入解析大总结 java基础(一) 深入解析基本类型 java基础(二) 自增自减与贪心规则 java基础(三) 加强型for循环与Iterator java基础(四) java运算顺序的深入解析 java基础(五) Str...

sihailoveyan
04/25
0
0
Java高级部分笔记-------Java5.0的新特性

静态导入 1.1 JDK 1.5 增加的静态导入语法用于导入类的某个静态属性或方法。使用静态导入可以简化程序对类静态属性和方法的调用。 1.2 语法:Import static 包名.类名.静态属性|静态方法|* ...

查封炉台
2014/04/21
0
0
从java程序员到CTO的成长路线图

很多新人不知道从事java开发,具体的发展路径是怎么样的,甚至很多人都不能区分程序猿和攻城师的区别。包括不少小白,从事java开发都半年,甚至1年了,对职业发展还没有清晰的认证。这非常不...

6pker
2013/10/24
0
2
一份关于 Java、Kotlin 与 Android 的学习笔记

JavaKotlinAndroidLearn 这是一份关于 Java 、Kotlin 、Android 的学习笔记,既包含对基础知识点的介绍,也包含对一些重要知识点的源码解析,笔记的大纲如下所示: Java 重拾Java(0)-基础知...

叶应是叶
08/08
0
0
JDBC基础教程之CallableStatement

概述      CallableStatement 对象为所有的 DBMS 提供了一种以标准形式调用已储存过程的方法。已储存过程储存在数据库中。对已储存过程的调用是 CallableStatement对象所含的内容。这种调...

xiahuawuyu
2012/07/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JS:异步 - 面试惨案

为什么会写这篇文章,很明显不符合我的性格的东西,原因是前段时间参与了一个面试,对于很多程序员来说,面试时候多么的鸦雀无声,事后心里就有多么的千军万马。去掉最开始毕业干了一年的Jav...

xmqywx
今天
0
0
Win10 64位系统,PHP 扩展 curl插件

执行:1. 拷贝php安装目录下,libeay32.dll、ssleay32.dll 、 libssh2.dll 到 C:\windows\system32 目录。2. 拷贝php/ext目录下, php_curl.dll 到 C:\windows\system32 目录; 3. p...

放飞E梦想O
今天
0
0
谈谈神秘的ES6——(五)解构赋值【对象篇】

上一节课我们了解了有关数组的解构赋值相关内容,这节课,我们接着,来讲讲对象的解构赋值。 解构不仅可以用于数组,还可以用于对象。 let { foo, bar } = { foo: "aaa", bar: "bbb" };fo...

JandenMa
今天
1
0
OSChina 周一乱弹 —— 有人要给本汪介绍妹子啦

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享水木年华的单曲《中学时代》@小小编辑 手机党少年们想听歌,请使劲儿戳(这里) @须臾时光:夏天还在做最后的挣扎,但是晚上...

小小编辑
今天
21
5
centos7安装redis及开机启动

配置编译环境: sudo yum install gcc-c++ 下载源码: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 解压源码: tar -zxvf redis-3.2.8.tar.gz 进入到解压目录: cd redis-3......

hotsmile
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部