以object数组为参数的方法实现可变参数列表

  1. package chapter5;
  2.  
  3. /**
  4. * 以object数组为参数的方法实现可变参数列表
  5. */
  6. class A {
  7. }
  8.  
  9. public class VarArgs {
  10. static void printArray(Object[] args) {
  11. for (Object obj : args)
  12. System.out.print(obj + " ");
  13. System.out.println();
  14. }
  15.  
  16. public static void main(String[] args) {
  17. printArray(new Object[] { new Integer(55), new Float(5.34),
  18. new Double(3.56) });
  19. printArray(new Object[] { "one", "two", "three" });
  20. printArray(new Object[] { new A(), new A(), new A() });
  21. }
  22. }

【运行结果】:

55   5.34   3.56  
one   two   three  
chapter5.A@18a992f   chapter5.A@4f1d0d   chapter5.A@1fc4bec

java SE5之后,有了新特性可以实现可变参数列表

  1. package chapter5;
  2.  
  3. /**
  4. * 可变参数列表
  5. */
  6. public class NewVarArgs {
  7. static void printArray(Object... args) {
  8. for (Object obj : args)
  9. System.out.print(obj + " ");
  10. System.out.println();
  11. }
  12.  
  13. public static void main(String[] args) {
  14. printArray(new Integer(33), new Float(5.23), new Double(3.55));
  15. printArray(33,5.23f,3.55d);
  16. printArray("one","two","three");
  17. printArray(new A(),new A(),new A());
  18. printArray((Object[])new Integer[]{1,2,3,4,5,6});
  19. printArray();
  20. }
  21.  
  22. }

【运行结果】:

33  5.23  3.55 
33  5.23  3.55 
one  two  three 
chapter5.A@18a992f  chapter5.A@4f1d0d  chapter5.A@1fc4bec 
1  2  3  4  5  6

上面的例子中,printArray();是正确的,表明可以将0个参数传递给可变参数列表。当具有可选的尾随参数是,很有用。

  1. package chapter5;
  2.  
  3. /**
  4. * 有可选尾随可变参数列表
  5. */
  6. public class OptionalTrailingArguments {
  7. static void f(int required, String... trailing) {
  8. System.out.print("required:" + required + " ");
  9. for (String s : trailing)
  10. System.out.print(s + " ");
  11. System.out.println();
  12. }
  13.  
  14. public static void main(String[] args) {
  15. f(1, "one");
  16. f(2, "one", "two");
  17. f(0);
  18. }
  19. }

【运行结果】:

required:1 one
required:2 one two
required:0

可变参数列表与自动包装机制和谐共处

  1. package chapter5;
  2.  
  3. /**
  4. * 可变参数列表与自动包装机制和谐共处
  5. */
  6. public class AutoboxingVarargs {
  7. static void f(Integer... args) {
  8. for (Integer i : args)
  9. System.out.print(i + " ");
  10. System.out.println();
  11. }
  12.  
  13. public static void main(String[] args) {
  14. f(new Integer(1), new Integer(2));
  15. f(4, 5, 6, 7);
  16. f(23, new Integer(24), 25);
  17. }
  18. }

【运行结果】:

1  2 
4  5  6  7 
23  24  25

 可变参数列表使重载变复杂

  1. package chapter5;
  2.  
  3. /**
  4. * 可变参数列表使重载变复杂
  5. */
  6. public class OverloadVargs {
  7.  
  8. static void f(Character... args) {
  9. System.out.print("first");
  10. for (Character c : args)
  11. System.out.print(" " + c);
  12. System.out.println();
  13. }
  14.  
  15. static void f(Integer... args) {
  16. System.out.print("second");
  17. for (Integer i : args)
  18. System.out.print(" " + i);
  19. System.out.println();
  20. }
  21.  
  22. static void f(Long... args) {
  23. System.out.print("Third");
  24. }
  25.  
  26. public static void main(String[] args) {
  27. f('a','b','c');
  28. f(1);
  29. f(2,1);
  30. f(0);
  31. f(0L);
  32. //f();
  33. }
  34.  
  35. }

【运行结果】:

first a b c
second 1
second 2 1
second 0
Third

上例会自动匹配重载的方法,但是调用f()时,就不知道匹配哪个方法了,此时须增加一个可变参数来解决问题。

(四)《Java编程思想》——可变参数列表的更多相关文章

  1. java基础(九) 可变参数列表介绍

    一.可变参数简介 在不确定参数的个数时,可以使用可变的参数列表. 1. 语法: 参数类型...(三个点) 例如: void printArray(Object...) 注意: 每个方法最多只有一个可变 ...

  2. Java 可变参数列表

    1.可变参数列表的简单实现 当调用方法时,方法的参数个数或类型未知时,称其为可变参数列表.在以前的Java代码中,可以使用Object数组来实现这样的功能.因为,所有的类都是直接或间接继承于Objec ...

  3. 可变参数列表-Java SE5新特性(转)

    Java1.5增加了新特性:可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理.注意:可变参数必须位于最后一项.当可变参数个数多于一个时,必将有一个不是最后一项,所以只支持 ...

  4. “全栈2019”Java第三十四章:可变参数列表

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. Java编程思想第四版勘误

    坊间传说这本书翻译得很烂,我倒觉得还好.虽然看原文更准确,但是如果在具备一定编程思维和基础.能够看出来疑问的情况下,还是看中文更快一些,而且这本书本身也不适合初学者看.当然,错误和不通顺还是有的,而且 ...

  6. 《Java编程思想第四版完整中文高清版.pdf》-笔记

    D.2.1 安插自己的测试代码 插入下述“显式”计时代码,对程序进行评测: long start = System.currentTimeMillis(); // 要计时的运算代码放在这儿 long ...

  7. 《Java编程思想》读书笔记(四)

    前言:三年之前就买了<Java编程思想>这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第十七章到第十八章的内容,这一次 ...

  8. 《Java编程思想第四版》附录 B 对比 C++和 Java

    <Java编程思想第四版完整中文高清版.pdf>-笔记 附录 B 对比 C++和 Java “作为一名 C++程序员,我们早已掌握了面向对象程序设计的基本概念,而且 Java 的语法无疑是 ...

  9. JAVA编程思想(第四版)学习笔记----4.8 switch(知识点已更新)

    switch语句和if-else语句不同,switch语句可以有多个可能的执行路径.在第四版java编程思想介绍switch语句的语法格式时写到: switch (integral-selector) ...

随机推荐

  1. 【C++学习之路】派生类的构造函数(三)

    三.多层继承的派生类 1.多层继承的派生类只需在构造函数的初始化列表中写出直接基类的构造函数即可 class student { public: student(int n, string nam) ...

  2. 多线程09-Lock和Condition

    1.概念 Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象.两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象. 2. ...

  3. phpcms v9教程 联动搜索在房地产网站开发中的应用

    开发简述:使用phpcms v9系统,修改源文件5个,创建模型:楼盘.出售.出租.中介.小区,增加联动菜单:楼盘,增加用户组:房产中介.实现功能:游客发布信息.会员申请中介.楼盘全方位展示.报名团购. ...

  4. delphi if 语句循环语句

    if语句------------------------------------------------------------------------------------------------ ...

  5. laravel和dingoapi的结合使用

    dingoapi是一个laravel的开源插件,可以在github上搜索到,现在在做一个项目,项目中总是会有后端跟前端的json数据交互,而这个dingoapi为json交互提供了很大的便利. 先安装 ...

  6. oracle 数据库连接的四种方式

    Oracle Thin JDBC Driver驱动程序包名:ojdbc14.jar.ojdbc6.jar驱动程序类名: oracle.jdbc.driver.OracleDriverJDBC URL: ...

  7. 『安全工具』Nmap 强悍的端口扫描工具

    作为时下流行的端口扫描工具,Nmap有因其扫描的隐密性有“端口扫描之王”之称 上图是黑客帝国(The Matrix)中崔妮蒂用Nmap入侵核发电站的能源管理系统 0x 01 Nmap介绍 Nmap是一 ...

  8. cf C. Mittens

    http://codeforces.com/contest/370/problem/C 题意:有n个人,m中颜色的手套,开始每个人都是两只相同颜色的手套,经过交换最多可以换出多少个人戴不同颜色的手套. ...

  9. ural 1494 Monobilliards

    #include <cstdio> #include <cstring> #include <algorithm> using namespace std; ],b ...

  10. 来一个可能防止恶意采集和爬虫的SH

    没办法,公司的要求,还有,一些山寨爬虫完全不够我们运维人员的感觉, 一天爬虫搞个三四十万的LOG,那我只好干了.. 人家GOOGLE,BAIDU,一天大约也就五六千吧.. 有一个小的SSH技巧,是判断 ...