`
李灵晖-raylee
  • 浏览: 135877 次
博客专栏
Group-logo
从头认识java
浏览量:0
文章分类
社区版块
存档分类
最新评论

从头认识java-4.8 数组的初始化(2)-可变参数列表

 
阅读更多

接着上一节,我们这一章节来聊一下数组的另外一个应用:可变参数列表

1.可变参数列表带来的改变

在没有出现可变参数列表的时候,我们一般会使用数组来替代,但是有一个问题,每一次都需要先建立一个数组作为参数,不能动态的形成数组作为参数。

package com.ray.ch04;

public class Test {
	public static void printArray(Object[] objects) {
		for (int i = 0; i < objects.length; i++) {
			System.out.println(objects[i]);
		}
	}

	public static void main(String[] args) {
		Object[] objects = { 1, "2", new Integer(3), new Book() };
		printArray(objects);
	}
}

class Book {
}

输出:

1
2
3
com.ray.ch04.Book@1f4689e


我们把上面的代码改成可变参数列表的形式:

package com.ray.ch04;

public class Test {
	public static void printArray(Object... objects) {
		for (int i = 0; i < objects.length; i++) {
			System.out.println(objects[i]);
		}
	}

	public static void main(String[] args) {
		printArray(1, "2", new Integer(3), new Book());
	}
}

class Book {
}

输出:

1
2
3
com.ray.ch04.Book@61de33

上面的代码使得参数更加灵活,不用每次都先预定一个数组,可以动态的形成数组参数列表。

而且,可变参数可以传空值进去。


2.可以控制可变参数列表的类型

package com.ray.ch04;

public class Test {
	public static void printArray(Book... books) {
		for (int i = 0; i < books.length; i++) {
			System.out.println(books[i]);
		}
	}

	public static void main(String[] args) {
		// printArray(1);//抛异常
		printArray(new Book());
	}
}

class Book {
}

上面的代码控制了输入参数的类别,因此,当我们输入1时,会抛异常。

我们下面再举一个例子:

package com.ray.ch04;

public class Test {
	public static void printIntArray(int... ints) {
		System.out.println(ints.getClass());
		for (int i = 0; i < ints.length; i++) {
			System.out.println(ints[i]);
		}
	}

	public static void printBookArray(Book... books) {
		System.out.println(books.getClass());
		for (int i = 0; i < books.length; i++) {
			System.out.println(books[i]);
		}
	}

	public static void main(String[] args) {
		printIntArray(1, 2, 3);
		printBookArray(new Book(), new Book());
	}
}

class Book {
}

输出:

class [I
1
2
3
class [Lcom.ray.ch04.Book;
com.ray.ch04.Book@61de33
com.ray.ch04.Book@14318bb


class [I代表int的数组类型,class [Lcom.ray.ch04.Book;代表是book的数组类型。


3.基本类型的方法重载

package com.ray.ch04;

public class Test {
	public static void printIntArray(int... ints) {
		System.out.println(ints.getClass());
		for (int i = 0; i < ints.length; i++) {
			System.out.println(ints[i]);
		}
	}

	public static void printIntArray(Integer... ints) {
		System.out.println(ints.getClass());
		for (int i = 0; i < ints.length; i++) {
			System.out.println(ints[i]);
		}
	}

	public static void main(String[] args) {
		// printIntArray(new Integer(1), new Integer(2), new Integer(3),
		// new Integer(4));
		// printIntArray(1, 2, 3);
	}
}

上面的代码注释部分如果打开,都会抛异常,主要是两个方法模棱两可。

其实对于上面的两个方法,我们只需要取一个即可,因为可变参数列表与解包机制是和谐共处的。


总结:这一章节我们讨论了可变参数的几个方面,大家需要注意的是1和2,第三点出现的比较少,因此可以忽略。


这一章节就到这里,谢谢。

-----------------------------------

目录




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

分享到:
评论

相关推荐

    php数组当链表-php数组和链表的区别总结 数组和链表.pdf

    - **数组**:数组通常在栈内存中分配,这意味着它们的生命周期短,分配和释放速度快,但大小受限且不可变。 - **链表**:链表的节点在堆内存中分配,提供了更大的灵活性,可以动态地调整大小,但分配和管理内存的...

    mchange-commons-java-0.2.11.zip

    在Java开发中,这样的库可以极大地提高开发效率,因为它封装了常见的功能,开发者可以直接使用,而无需从头编写代码。 描述中的 "mchange-commons-java-0.2.11.jar包" 是该库的主要组成部分,是一个Java归档(JAR)...

    算法面试通关40讲完整课件 05-07 数组、链表

    数组和链表是数据结构中最基础且重要的两种结构,在算法面试中经常被考察。了解它们的特点、操作效率以及如何在实际问题中应用是面试成功的关键。 数组是一种线性数据结构,其中元素存储在连续的内存位置。这使得...

    eclipse-java-2021-12-R-win32-x86_64.zip

    Eclipse IDE for Java Developers 是一款广泛使用的集成开发环境(IDE),专为Java编程设计。它由Eclipse基金会维护,提供了一整套工具,用于编写、调试、测试和部署Java应用程序。2021-12-R 版本是Eclipse的一个...

    单片机C语言实例-用数组的指针控制P0 口8 位LED流水点亮.zip

    在具体编程时,我们需要初始化P0口为输出模式,并设置初始的LED状态数组。然后,设定一个主循环,每次循环通过指针遍历数组,将数组中的值写入P0口。在写入后,调用延迟函数,使灯光有时间显示出来。循环会一直进行...

    数组循环左移

    对于一个长度为n的一维数组,如果要向左旋转i个位置,直观的方法是创建一个新的临时数组,将原数组后n-i个元素复制到新数组,然后将原数组前i个元素复制到新数组的剩余位置,最后将新数组的内容复制回原数组。...

    api-ntrip-java-client-master.zip_android_ntrip_ntrip java实现_ntr

    标题中的“api-ntrip-java-client-master.zip”是一个包含Java实现的NTRIP客户端的源代码压缩包,专门针对Android平台。NTRIP(Networked Transport of RTCM via Internet Protocol)是一种用于实时传输GPS(全球...

    aip-java-sdk-4.2.0

    标题 "aip-java-sdk-4.2.0" 指的是一个针对Android平台的AIP(Artificial Intelligence Platform)SDK的特定版本,版本号为4.2.0。这个SDK是百度公司提供的,用于帮助开发者在Android应用程序中集成和使用百度的各种...

    数据结构基础-数组、链表语法基础复习.pdf

    在对结构体变量进行初始化和赋值时,可以采用列表初始化的方式,也可以先定义一个结构体变量,再将其他结构体变量的数据赋给它。 总结来看,本文件系统地复习了数组和链表的基本概念、语法定义以及它们在数据结构中...

    易语言-文本数组排序

    2. 如何在易语言中定义和初始化文本数组。 3. 使用内置或自定义函数进行文本比较和排序。 4. 掌握至少一种排序算法的实现,如冒泡排序或快速排序。 5. 如何读取和使用模块源码来增强程序功能。 6. 处理不同文本特性...

    链表及动态数组.zip

    - 初始化数组,分配初始容量的内存。 - 扩展数组,当数组满时,使用`realloc`分配更大的内存,并复制原有元素。 - 缩小数组,如果数组过大,可以减少内存占用,但要注意避免数据丢失。 - 插入和删除元素,可能...

    手把手 - 微服务 Windows 开发环境从头搭建 2022-09-05 直播录像 - 软件安装包-2.zip

    【标题】: "手把手 - 微服务 Windows 开发环境从头搭建 2022-09-05 直播录像 - 软件安装包-2.zip" 这个压缩包文件包含了搭建微服务开发环境所需的基础软件,包括JDK(Java Development Kit)和MySQL数据库。...

    Java 上机作业2020.4.3

    2. **初始化方法`init(int n)`**: - 这个方法接收一个整数`n`作为参数,表示数组的长度。 - 在方法内部,你应该分配一个大小为`n`的数组,并使用`Scanner`从键盘读取`n`个整数来填充数组。 3. **求最大值`max()`...

    aspose-words-java-23.6-jdk17.jar.zip

    【标题】"Aspose.Words for Java 23.6 with JDK 17 Support" Aspose.Words 是一个强大的文档处理库,专为Java开发者设计,用于创建、操作和转换各种文档格式。版本23.6是这个库的一个重要更新,它引入了对Java ...

    Java数据结构和算法

    - **初始化列表**: 多维数组同样可以使用初始化列表初始化。 ```java int[][] twoD = { {1, 2, 3}, {4, 5, 6} }; ``` **边界检查**: Java在运行时会自动检查数组索引是否越界,如果尝试访问超出范围的索引,...

    数组放不重复的随机数

    1. **初始化数组**:首先根据需求确定数组的长度,并创建相应长度的数组。 2. **生成随机数**:使用`Math.random()`函数生成一个介于0(含)至1(不含)之间的随机小数,再通过乘法和取整操作转换为所需的随机整数。...

    java-多文件上传dome

    本示例"java-多文件上传dome"提供了一个工具包,可直接下载使用,方便开发者快速实现多文件上传功能。 在Java中,处理多文件上传通常涉及到Servlet API,特别是`Part`接口,它是Java EE 7引入的一个用于处理HTTP...

    Java 实现线性表

    通过声明一个数组变量,我们可以预定义数组的长度,并在初始化时为每个元素分配空间。 ```java int[] array = new int[10]; // 创建一个存储10个整数的数组 ``` 2. **操作**: - **插入**:数组在创建时就确定了...

    JAVA类与对象及数组习题[借鉴].pdf

    11. 数组初始化:正确答案是 A.array2 = array1。 知识点:在 Java 中,数组可以初始化为 null 或一个新的数组,但不能将一个数组赋值给另一个数组。 12. 静态变量和实例变量:正确答案是 C.1。 知识点:在 ...

Global site tag (gtag.js) - Google Analytics