`

简单介绍Java的不定长度参数

 
阅读更多

先看两个简单的例子,来感受一下Java的不定长度参数
第一个例子:

Java代码  收藏代码
  1. public class VariArgs {  
  2.   
  3.     public static void main(String[] args) {  
  4.         test();  
  5.         test("aaa");  
  6.         test("aaa""bbb");  
  7.         test("aaa""bbb""ccc");  
  8.     }  
  9.   
  10.     public static void test(String... args) {  
  11.         System.out.println(args.getClass());  
  12.         for (String arg : args) {  
  13.             System.out.println(arg);  
  14.         }  
  15.     }  
  16. }  


第二个例子:

Java代码  收藏代码
  1. public class VariArgs {  
  2.   
  3.     public static void main(String[] args) {  
  4.         test("aaa");  
  5.         test("aaa""bbb");  
  6.         test("aaa""bbb""ccc");  
  7.     }  
  8.   
  9.     public static void test(String arg, String... args) {  
  10.         System.out.println(arg);  
  11.         System.out.println("----------------");  
  12.         for (String s : args) {  
  13.             System.out.println(s);  
  14.         }  
  15.     }  
  16. }  


   读者可以自己运行一下,这个不定长度参数的类型为String[],即字符串数组。
从上面可以看出,如果一个方法的参数定为不定参数的话,这个参数可以根据参数个数动态生成一个数组,然后传入方法执行。
    不过,不定参数有两个规定:第一,方法的参数列表中最多只有一个不定长度的参数;第二,就是不定长度的数组的位置必须是最后一个参数。不然不能通过编译。
    对于第一个规定,是因为如果有多于一个不定长度的参数,当真正调用这个方法的时候,JVM、将不知道前面的不定长度参数有多长, 下一个参数是从哪里开始.
    对于第二个参数也是一样,编译器不知道不定长度参数的长度,无法确定从哪里开始下一个参数。
    以下是几种不正确使用不定长度参数的例子,请不要这样写程序:

Java代码  收藏代码
  1. public static void test(Object... objs, Object obj);  
  2.   
  3. public static void test(Object obj1, Object... objs, Object obj2);  
  4.   
  5. public static void test(Object... objs1, Object... objs2);  


   不定参数的方法可以重载。(大家都知道,重载就是方法名相同,而方法的参数列表不同)
   下面给出重载的示例:

Java代码  收藏代码
  1. public class VariArgs {  
  2.   
  3.     public static void main(String[] args) {  
  4.         test("aaa");  
  5.         test("aaa""bbb");  
  6.         test("aaa""bbb""ccc");  
  7.     }  
  8.   
  9.     public static void test(Object... args) {  
  10.     }  
  11.   
  12.     public static void test(String arg, String... args) {  
  13.     }  
  14. }  


   读者如果细心的话,可以看出文章开头给出的两个例子的区别,就是第二个例子比第一个例子的test方法的参数多出了一个String arg,从感觉上没有太大的区别,这有点像编译原理的*和+的区别。第一个test方法指可以有0或N个String做参数,但第二个test方法指至少 一个String做为参数。
   然后结合重载来看,把第一个例子和第二个例子合并成一个类,得到以下代码:

Java代码  收藏代码
  1. public class VariArgs {  
  2.   
  3.     public static void main(String[] args) {  
  4.         test();  
  5.         test("aaa");  
  6.         test("aaa""bbb");  
  7.         test("aaa""bbb""ccc");  
  8.     }  
  9.   
  10.     public static void test(String... args) {  
  11.         System.out.println(args.getClass());  
  12.         for (String arg : args) {  
  13.             System.out.println(arg);  
  14.         }  
  15.     }  
  16.   
  17.     public static void test(String arg, String... args) {  
  18.         System.out.println(arg);  
  19.         System.out.println("----------------");  
  20.         for (String s : args) {  
  21.             System.out.println(s);  
  22.         }  
  23.     }  
  24. }  


    读者可以编译下这个程序,结果是编译不通过。为什么呢?程序编译到第五行时,不能确定test("aaa")该用第10行的test方法还是第17行的方 法,因为两个方法都可以有相同的参数列表。都能精确匹配上参数列表,编译器在这种情况下只好报出编译不能通过的错误。所以在重载这样的方法时,注意参数列 表,不要使两个方法可以有同样的参数列表。

原文地址:http://tianlihu.iteye.com/blog/370854

分享到:
评论

相关推荐

    java可变参数

    综上所述,Java可变参数是Java语言中一个强大的特性,它简化了处理不定数量参数的方法定义,同时提供了良好的可读性和便利性。理解其工作原理和使用注意事项,可以帮助我们编写出更高效、更易于维护的代码。

    关于java中可变长参数的定义及使用方法详解

    Java中的可变长参数(Varargs)是一种非常实用的语言特性,它允许我们在定义方法时接受一个不定数量的参数。这种特性使得我们无需为每个可能的参数组合定义单独的方法,简化了代码并提高了代码的可读性和灵活性。...

    java类和对象之可变参数.docx

    Java 类和对象是编程语言的基础,而可变参数(Variable Argument)是 Java 为了解决方法接收不定数量参数的问题引入的一个特性。这个特性允许我们创建一个方法,它能接受一个可变数量的参数,而不是固定数量。这在...

    Java基础知识加强

    可变参数是JDK 5.0的另一创新,它允许方法接收不定数量的参数,如Arrays.asList()方法。调用时,编译器会自动创建一个数组来存储这些参数。但是,可变参数必须作为方法参数列表的最后一个参数,并且一个方法只能有一...

    优质java课件 java程序设计教程(第6版)07.数组复习(共19页).ppt

    Java语言中的数组是一种重要的数据结构,它...此外,可变长度参数列表的引入增加了代码的简洁性和可读性,使得处理不定数量参数的操作更加便利。在学习Java编程的过程中,熟练掌握数组及其相关操作是至关重要的一步。

    官方Java 5[1].0 API文档中文版.rar

    8. **可变参数长度方法(Variable Arity Methods)**:与变量参数相似,但应用于方法声明,允许方法接受不定数量的参数。 Java 5.0 API文档中文版详细列出了所有这些特性的使用方法,包括各个类的构造函数、方法、...

    JavaJDK1.5中文简体API文档

    - **变量长度参数(Varargs)**:允许在方法声明中使用`...`作为参数,简化了不定数量的参数传递。 - **增强的for循环(For-Each Loop)**:简化了遍历集合、数组等的数据结构。 3. **核心类库** - **`java.lang...

    黑马程序员入学Java精华总结

    - Java允许方法接收不定数量的参数,使用省略号`...`表示。 7. **数组简介** - 数组是一种存储相同类型元素的数据结构。 8. **一维数组的声明与初始化** - 定义数组的语法为:`数据类型[] 数组名 = new 数据...

    快速解决SpringMVC @RequestBody 用map接收请求参数的问题

    在 SpringMVC 中,使用 @RequestBody 注解可以将请求体中的数据转换为 Java 对象,但是在使用 map 接收请求参数时,经常会遇到一些问题。本文将讨论如何快速解决 SpringMVC @RequestBody 用map接收请求参数的问题。 ...

    corejava培训笔记

    - 可变长参数只能作为方法的最后一个参数,且不能与其他固定长度参数混淆。 7. **静态导入** - 静态导入(`import static`)允许直接使用类的静态成员,简化代码,但可能导致命名冲突。 这些知识构成了Java开发的...

    最新Java面试题

    - **可变参数的作用和特点**:可变参数允许方法接收不定数量的参数,这些参数会被打包成一个数组传递给方法。使用时只需在参数类型后面加上三个点`...`。 #### 第五章 面向对象 - **类和对象的关系**:类是对一类...

    年java基础加强.pptx

    可变参数是一种在方法声明中接受不定数量参数的机制。如Arrays.asList()方法,可以接收任意数量的参数。使用可变参数时,需要注意它们必须是参数列表的最后一个,并且在同一方法中不能有其他可变参数。 枚举类是...

    Java Varargs 可变参数用法详解

    Java Varargs(可变参数)是Java 1.5版本引入的一个特性,允许开发者在编写方法时可以接受任意数量的参数。Varargs是variable arguments的缩写,即变参,有时也简称为variable arguments。可变参数使得方法能够接受...

    详细的java基础总结

    Java 5之后引入了可变参数的概念,允许方法接受数量不定的参数。例如: ``` public void print(int... numbers) { for (int num : numbers) { System.out.println(num); } } ``` - **命令行参数** Java...

    Java基础_方立勋.ppt

    可变参数是JDK 5的另一大创新,它允许方法接受不定数量的参数,如`public void foo(int... args)`。在方法内部,可变参数会被编译器自动封装为数组。可变参数必须是参数列表的最后一个,且一个方法只能有一个可变...

    Java基础加强Java基础加强Java基础加强

    4. **可变参数**:从JDK 1.5开始,Java允许方法接收不定数量的参数。通过在参数类型后面加上三个点(...),可以创建一个可变参数的方法。例如: ```java public void printNumbers(int... nums) { for (int num ...

    传智播客java基础加强(佟刚)

    - **可变参数**:允许方法接收数量不定的参数,参数以数组形式传递,提高了方法的灵活性。 - **枚举**:枚举类型是JDK 5.0新增的,用于表示有限的、固定的对象集合,增强了类型安全,并提供了更好的编译时检查。 ...

    Java面试笔试题目汇总 (2).pdf

    8. **数组声明**:在Java中,正确声明数组的方式是B和E选项,其中B表示一个不定长度的一维数组,E表示一个二维的Object数组。 9. **包和import语句**:在同一个类中,`package`语句只能出现一次,且必须位于文件...

    java课程设计贪吃蛇游戏设计asd.doc

    然而,随着Java的版本更新,例如Java SE(标准版),性能得到了显著提升,包括引入泛型、类型安全的枚举、不定长参数和自动装/拆箱等特性,增强了语言的灵活性和效率。 Java课程设计的目的是让学生深入理解Java编程...

Global site tag (gtag.js) - Google Analytics