接着上一节,我们这一章节来聊一下数组的另外一个应用:可变参数列表
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,第三点出现的比较少,因此可以忽略。
这一章节就到这里,谢谢。
-----------------------------------
目录
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
从头写React-like框架的工程搭建实现 最近在网上看到了 Build your own React 这篇文章,作者从零开始实现了一个简易类 React 框架,虽然没有过多的优化,但 React 中的核心思想 Concurrent Mode,Fiber ...
视频 https://www.bilibili.com/video/BV1914y1s7hi
从头开始学习Java课程-资料来源PillsInformática。
因此,对于给定的数组来说,最为暴力的办法就是直接一个个进行比较,从头依次遍历找它后面比他小的元素个数,最后统计最终的结果。但是这样的方法的算法复杂度是O(n2)O(n^2)O(n2),对于题目给定的数据范围肯定是无法...
视频 https://www.bilibili.com/video/BV1914y1s7hi
C99标准推出了可变大小的多维数组,当然,实现该标准的编译器还不多,但是也从一个方 面说明了变量大小的多维数组是很有用的. C++标准直到现在还不支持,明年(2003年)的新标准也不知道会不会加进去.但是C++程序 员...
该代码设计了一个函数用来删除数组中的元素,要求:数组中删除第i个元素,删除的位置用0代替,然后继续在数组中查找第i个元素,(遇到0继续往下找,到达元素末尾后从头查找)
军工行业2021年度投资策略:而今迈步从头越-20201115-招商证券.pdf
Java-3D游戏引擎与基本游戏Java中使用LWJGL,OpenGL,OpenAL等的3D游戏引擎。 从头开始
外卖订餐java源码 你会学到什么 通过 Java 片段的构建块,您将能够立即了解 Java 编程的要点。 你需要什么 勇敢地浏览存储库! 或替代开源 JDK 1.8 版本 截至今天,该存储库已通过测试 Oracle JDK 1.8 OpenJDK 1.8 ...
赖世雄英语从头学 下载-附件资源
本资料是UCSF DOCK的使用案例分享的输入资料,将使用DOCK 6.11自带的片段库,使用DOCK/RDKit的 DOCK_D3N功能从头设计分子。便于使用者直接从这部分设计工作开始,不需花时间来准备输入文件。
乙二醇2020年度策略报告:“熊”关漫道真如铁,而今迈步从头越-20191230-光大期货-36页.rar
java实现验证码功能源码 Java Periphery 是一个高性能库,用于用户空间 Linux 中的 GPIO、LED、PWM、SPI、I2C、MMIO 和串行外设 I/O 接口访问。 我没有尝试从头开始构建它并生成 JNI 包装器。 这节省了大量手动编码...
java二分法源码C++ 中的 MiniJava 编译器(从头开始) 从 MiniJava() 到用(简单)C++ 编写的编译器。 据我所知,这是最快的 Minijava(到 LLVM IR)编译器。 描述 目前,编译器处于早期开发阶段。 在撰写本文时,...
从头学XML和Java编程一例通.part2.rar
开发人员零java-Mentorama 在此存储库中,将从头开始插入Java Developer模块的Mentorama课程期间开发的所有练习。
2D-Java-Tile-Game 我第一次进入 Java 世界! 这是一个周末项目,旨在创建一个基于 2D 瓷砖的基本游戏。 一切都是从头开始编写的(从创建一个基本的 JFrame,到制作画布,渲染图形等......)。 在 src 目录中查看...
3D游戏从头编-网上收集,很基础. 第一回:开发环境 第二回:3D基本概念 第三回:第一个D3D程序 第四回:渲染顶点 第五回:渲染索引顶点 第六回:摄象机 第七回:灯光 第八回:纹理 第九回:3D模型(.x)
例如,当我们想从头开始创建RPC框架时,我们需要了解Java动态代理和序列化。 这是清单: 技术 模块/链接 设想 地位 评论 动态代理 动态代理 RPC 智商 完毕 字节程序Java代理, 乐器, 字节好友 字节码程序java-...