接着上一节,我们这一章节来聊一下数组的另外一个应用:可变参数列表
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,第三点出现的比较少,因此可以忽略。
这一章节就到这里,谢谢。
-----------------------------------
目录
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
- **数组**:数组通常在栈内存中分配,这意味着它们的生命周期短,分配和释放速度快,但大小受限且不可变。 - **链表**:链表的节点在堆内存中分配,提供了更大的灵活性,可以动态地调整大小,但分配和管理内存的...
在Java开发中,这样的库可以极大地提高开发效率,因为它封装了常见的功能,开发者可以直接使用,而无需从头编写代码。 描述中的 "mchange-commons-java-0.2.11.jar包" 是该库的主要组成部分,是一个Java归档(JAR)...
数组和链表是数据结构中最基础且重要的两种结构,在算法面试中经常被考察。了解它们的特点、操作效率以及如何在实际问题中应用是面试成功的关键。 数组是一种线性数据结构,其中元素存储在连续的内存位置。这使得...
Eclipse IDE for Java Developers 是一款广泛使用的集成开发环境(IDE),专为Java编程设计。它由Eclipse基金会维护,提供了一整套工具,用于编写、调试、测试和部署Java应用程序。2021-12-R 版本是Eclipse的一个...
在具体编程时,我们需要初始化P0口为输出模式,并设置初始的LED状态数组。然后,设定一个主循环,每次循环通过指针遍历数组,将数组中的值写入P0口。在写入后,调用延迟函数,使灯光有时间显示出来。循环会一直进行...
对于一个长度为n的一维数组,如果要向左旋转i个位置,直观的方法是创建一个新的临时数组,将原数组后n-i个元素复制到新数组,然后将原数组前i个元素复制到新数组的剩余位置,最后将新数组的内容复制回原数组。...
标题中的“api-ntrip-java-client-master.zip”是一个包含Java实现的NTRIP客户端的源代码压缩包,专门针对Android平台。NTRIP(Networked Transport of RTCM via Internet Protocol)是一种用于实时传输GPS(全球...
标题 "aip-java-sdk-4.2.0" 指的是一个针对Android平台的AIP(Artificial Intelligence Platform)SDK的特定版本,版本号为4.2.0。这个SDK是百度公司提供的,用于帮助开发者在Android应用程序中集成和使用百度的各种...
在对结构体变量进行初始化和赋值时,可以采用列表初始化的方式,也可以先定义一个结构体变量,再将其他结构体变量的数据赋给它。 总结来看,本文件系统地复习了数组和链表的基本概念、语法定义以及它们在数据结构中...
2. 如何在易语言中定义和初始化文本数组。 3. 使用内置或自定义函数进行文本比较和排序。 4. 掌握至少一种排序算法的实现,如冒泡排序或快速排序。 5. 如何读取和使用模块源码来增强程序功能。 6. 处理不同文本特性...
- 初始化数组,分配初始容量的内存。 - 扩展数组,当数组满时,使用`realloc`分配更大的内存,并复制原有元素。 - 缩小数组,如果数组过大,可以减少内存占用,但要注意避免数据丢失。 - 插入和删除元素,可能...
【标题】: "手把手 - 微服务 Windows 开发环境从头搭建 2022-09-05 直播录像 - 软件安装包-2.zip" 这个压缩包文件包含了搭建微服务开发环境所需的基础软件,包括JDK(Java Development Kit)和MySQL数据库。...
2. **初始化方法`init(int n)`**: - 这个方法接收一个整数`n`作为参数,表示数组的长度。 - 在方法内部,你应该分配一个大小为`n`的数组,并使用`Scanner`从键盘读取`n`个整数来填充数组。 3. **求最大值`max()`...
【标题】"Aspose.Words for Java 23.6 with JDK 17 Support" Aspose.Words 是一个强大的文档处理库,专为Java开发者设计,用于创建、操作和转换各种文档格式。版本23.6是这个库的一个重要更新,它引入了对Java ...
- **初始化列表**: 多维数组同样可以使用初始化列表初始化。 ```java int[][] twoD = { {1, 2, 3}, {4, 5, 6} }; ``` **边界检查**: Java在运行时会自动检查数组索引是否越界,如果尝试访问超出范围的索引,...
1. **初始化数组**:首先根据需求确定数组的长度,并创建相应长度的数组。 2. **生成随机数**:使用`Math.random()`函数生成一个介于0(含)至1(不含)之间的随机小数,再通过乘法和取整操作转换为所需的随机整数。...
本示例"java-多文件上传dome"提供了一个工具包,可直接下载使用,方便开发者快速实现多文件上传功能。 在Java中,处理多文件上传通常涉及到Servlet API,特别是`Part`接口,它是Java EE 7引入的一个用于处理HTTP...
通过声明一个数组变量,我们可以预定义数组的长度,并在初始化时为每个元素分配空间。 ```java int[] array = new int[10]; // 创建一个存储10个整数的数组 ``` 2. **操作**: - **插入**:数组在创建时就确定了...
11. 数组初始化:正确答案是 A.array2 = array1。 知识点:在 Java 中,数组可以初始化为 null 或一个新的数组,但不能将一个数组赋值给另一个数组。 12. 静态变量和实例变量:正确答案是 C.1。 知识点:在 ...