`
icejadelove
  • 浏览: 140322 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

可变参数列表-Java SE5新特性

阅读更多
1.可变参数列表的简单实现
当调用方法时,方法的参数个数或类型未知时,称其为可变参数列表。在以前的Java代码中,可以使用Object数组来实现这样的功能。因为,所有的类都是直接或间接继承于Object类。
VarArgs.java
package sample;
class A1{}
public class VarArgs {
static void printArray(Object[] args){
for(Object obj:args)
System.out.print(obj+" ");
System.out.println();
}
public static void main(String[] args){
printArray(new Object[]{
new Integer(47),new Float(3.14),new Double(11.11)
});
printArray(new Object[]{"one","two","three"});
printArray(new Object[]{new A1(),new A1(),new A1()});
}
}
结果:
47 3.14 11.11
one two three
sample.A1@a90653 sample.A1@de6ced sample.A1@c17164
这里printArray方法使用Object数组作为参数,并使用foreach语法遍历数组,打印每个对象。
2.Java SE5实现可变参数列表
同样的方法,参数可以这样定义,(Object…args),这样达到同样的效果。
NewVarArgs.java
package sample;
class A{}
public class NewVarArgs {
static void printArray(Object...args){
for(Object obj:args)
System.out.print(obj+" ");
System.out.println();
}
public static void main(String[] args){
printArray(new Integer(47),new Float(3.14),new Double(11.11));
printArray(47,
printArray("one","two","three");
printArray(new A(),new A(),new A());
printArray((Object[])new Integer[]{1,2,3,4});
printArray();
}
}
结果:
47 3.14 11.11
47 3.14 11.11
one two three
sample.A@a90653 sample.A@de6ced sample.A@c17164
1 2 3 4
这里没有显式的使用数组作为参数,但编译器实际上会为你填充数组。所以同样可以使用foreach语法来遍历之。
注意倒数第二行,编译器已经发现它是一个数组,所以不会在其上执行任何转换。最后一行表明,可以传递零个参数。
也可以指定所有可变参数的类型,下面的程序指定所有可变参数都必须是String。
OptionalArguments.java
package sample;
public class OptionalArguments {
static void f(String...trailing){
for(String s:trailing)
System.out.print(s+" ");
System.out.println();
}
public static void main(String[] args){
f("one");
f("two","three");
f();
}
}
结果:
one
two three
可以在可变参数列表中同时使用原始类型与包装类。
AutoboxingVarargs.java
package sample;
public class AutoboxingVarargs {
public static void f(Integer...args){
for(Integer i:args)
System.out.print(i+" ");
System.out.println();
}
public static void main(String[] args){
f(new Integer(1),new Integer(2));
f(3,4,5,6,7,8,9);
f(10,new Integer(11),12);
}
}
结果:
1 2
3 4 5 6 7 8 9
10 11 12
3.可变参数列表的重载(Overloading)
如果出现重载的情况,则编译器会自动调用最适合的方法匹配之。
OverloadingVarargs.java
package sample;
public class OverloadingVarargs {
static void f(Character...args){
System.out.print("first ");
for(Character c:args)
System.out.print(c+" ");
System.out.println();
}
static void f(Integer...args){
System.out.print("second ");
for(Integer i:args)
System.out.print(i+" ");
System.out.println();
}
static void f(Long...args){
System.out.print("third ");
for(Long l:args)
System.out.print(l+" ");
System.out.println();
}
static void f(Double...args){
System.out.print("forth ");
for(Double d:args)
System.out.print(d+" ");
System.out.println();
}
public static void main(String[] args){
f('a','b','c');
f(1);
f(2,1);
f(0.1);
f(
}
}
结果:
first a b c
second 1
second 2 1
forth 0.1
third 0
但下面的情况是不允许的,即某个方法中增加一个非可变参数。
OverloadingVarargs2.java
package sample;
public class OverloadingVarargs2 {
static void f(float i,Character...args){
System.out.println("first");
}
static void f(Character...args){
System.out.println("second");
}
public static void main(String[] args){
f(1,'a');
f('a','b');//Error
}
}
但可以这样解决问题。
package sample;
public class OverloadingVarargs2 {
static void f(float i,Character...args){
System.out.println("first");
}
static void f(char c,Character...args){
System.out.println("second");
}
public static void main(String[] args){
f(1,'a');
f('a','b');
}
}
即重载的方法必须保持一致的参数形式。
分享到:
评论

相关推荐

    java资料---Java SE.ppt

    Java SE 5(JDK 5.0)是一个重要的里程碑,引入了泛型、增强的for循环、可变参数、注解和自动装箱与拆箱等新特性,极大地提升了代码的可读性和效率。同时,EJB 3.0规范的发布简化了企业级Java应用的开发。 Java SE ...

    mysql-connector-java-5.1.6.jar

    MySQL Connector/J是MySQL数据库系统与...总的来说,"mysql-connector-java-5.1.6.jar"是Java开发者在构建MySQL数据库支持的应用时不可或缺的组件,它提供了丰富的功能,使Java与MySQL数据库之间的交互变得简单而高效。

    eclipse-java-2024-03-R-win32-x86-64.zip

    5. **调试器**:Eclipse的Java调试器提供了强大的断点、变量查看、调用堆栈分析等功能,使得复杂程序的调试变得直观和简单。 6. **集成测试框架**:Eclipse支持JUnit和TestNG等测试框架,便于编写和执行单元测试,...

    jdk20-java-se-language-updates.pdf

    在Java 20中,编译器能够更好地推断可变参数列表(varargs)的类型,使得编写泛型方法时无需显式指定类型参数。 ```java public <T> void printList(T... elements) { // ... } printList("Hello", "World"); // ...

    最新 java se 8 特性详解(英)

    Java SE 8,也称为Java Development Kit (JDK) 8,是Java编程语言的一个重要版本,它引入了许多新特性和改进,极大地扩展了Java的功能并提升了开发效率。以下是Java SE 8的一些核心特性详解: 1. **lambda表达式**...

    Java SE 14 Windows安装包

    1. **Records**:这是Java 14引入的一项重要特性,它简化了创建不可变数据类的方式。Records可以自动处理构造函数、equals()、hashCode()和toString()方法,使得数据载体类的编写更加简洁。 2. **Pattern Matching ...

    陈纪兵-Java8新功能

    Java SE 8是Java的一个重要版本,陈纪兵,作为Java平台研发高级经理,撰写了关于Java SE 8中引入的新特性的详细说明,其著作涵盖了Java SE 8的55个新功能。Java SE 8在2014年发布,对Java语言和库进行了现代化改进,...

    Java SE编程入门教程 java泛型(共11页).pptx

    - `java.lang.String`:表示不可变的字符序列,支持各种字符串操作。 - `java.math`:包含用于大型整数和浮点数计算的类。 - `java.util.ArrayList`和`java.util.List`:表示有序的对象集合,可以动态增长。 - `java...

    Java se编程指南

    8. **Java SE 6.0的新特性**:在Java SE 6.0版本中,有一些重要的改进和新特性,如增强的for循环(foreach)、可变参数(varargs)、自动装箱和拆箱,以及枚举类型的引入等,这些都提升了Java的易用性和效率。...

    JAVA SE6.0编程指南源码

    1. **语法特性**:Java SE 6.0引入了一些新的语法特性,如增强的for循环(foreach)、try-catch-finally的改进、可变参数(varargs)等。这些新特性简化了代码编写,提高了代码可读性。 2. **类型推断**:Java 6...

    Java Platform SE 8

    通过以上这些特性,Java SE 8 不仅为开发者带来了新的编程方式,也提升了开发效率和程序的可维护性,是Java发展历程中的一个里程碑。无论是初学者还是经验丰富的开发者,都需要深入理解这些特性,以便更好地利用Java...

    Java SE Development Kit 8

    下载并安装这个文件后,开发者可以在Windows环境下设置Java开发环境,包括Java编译器(javac)、Java解释器(java)和其他开发工具,从而开始使用Java 8的新特性进行开发工作。记得在安装后配置系统环境变量,确保...

    Java SE Development Kit 8u181

    6. **类型推断增强**:Java 8的类型推断机制`Diamond操作符`在创建泛型实例时变得更加智能,可以自动推断类型参数,减少了冗余代码。 7. **新的 Nashorn JavaScript引擎**:JDK 8包含了一个内置的JavaScript引擎,...

    eclipse-java-galileo-SR2-win32

    【JDK1.5】(也称为Java SE 5.0)是Java Development Kit的一个重要版本,它带来了许多重要的更新,包括类型安全的枚举、泛型、自动装箱/拆箱、可变参数以及增强的for循环等。Eclipse-Java-Galileo-SR2-win32版本...

    java-wrox-Beginning Java 5.0 2005

    - Java 5.0新特性详解:深入探讨泛型、枚举、可变参数等功能。 - 实战案例:通过具体的项目或示例来加深理解。 #### 3. **Wiley Publishing, Inc.** Wiley Publishing是一家国际知名的出版商,出版范围涵盖技术、...

    Java SE帮助文档(从5到8的英文版)

    Java 5,也称为Java 2 Platform Standard Edition 5.0(J2SE 5.0),引入了诸多重要特性,如泛型、枚举、自动装箱/拆箱、可变参数、增强的for循环(foreach)以及注解(Annotation)。泛型允许在类、接口和方法中...

    Java Platform SE 8 jdk8 API文档 CHM格式

    Java Platform Standard Edition 8(Java SE 8)是Java编程语言的一个重要版本,它引入了大量新特性,改进了已有的API,并优化了性能。这个CHM格式的API文档是开发者离线查阅Java SE 8 API的重要参考资料。下面将...

    个人笔记--JAVA基础

    - 使用`final`关键字定义不可变的变量。 - 通常用全大写字母表示。 - **2.5.2. 变量** - 定义变量时需要指定数据类型。 - 变量可以在任何作用域内声明,但只能在其声明的作用域内访问。 **2.6. 运算符** - **...

    Java SE 8 Documentation.chm

    总的来说,这份"Java SE 8 Documentation.chm"文件是理解Java 8新特性和API的重要资源,无论是初学者还是经验丰富的开发者,都能从中受益。通过深入学习和实践,可以提升开发技能,更好地利用Java 8进行软件开发。

    Java Platform SE 8.rar

    9. **新的集合工厂方法**:如`Map.of()`, `List.of()`等,创建不可变集合的便捷方式。 10. **重复注解**:一个元素现在可以有多个相同类型的注解,增强了注解的灵活性。 这些特性极大地扩展了Java的潜力,使得它在...

Global site tag (gtag.js) - Google Analytics