目录
一、可变参数概念。
二、基本使用方法。
(1)方法中声明可变参数。
(2)调用可变参数方法。
(3)可变参数使用时的注意事项。
1、可变参数的限制。
2、可变参数的类型。
3、关于数组的操作。
4、重载问题??
5、使用时的性能问题。
(4)关于Object... 数组变量名??
一、可变参数概念。
- 在Java中,可变参数(Varargs)是一种特殊的参数传递方式,它允许我们去传递数量不定的参数。
- 使用可变参数可以简化方法的调用,特别是当需要传递多个参数(零个或多个)时,可以避免创建数组或集合。
二、基本使用方法。
(1)方法中声明可变参数。
- 在方法的参数列表中,将最后一个参数声明为可变参数。(意思是:也就是只能位于参数列表中的最后一个)
- 通过在参数类型前加上三个点(
...
)来实现。- 代码演示如下。
(以Java的普通成员方法演示)
- 其中String... strs:表示可以接收任意多个参数的String类型的数组strs。
public void myMethod(String... strs) {for (String str: strs) {System.out.println(str);} }
- 这种参数形式被称为"可变参数"。它允许传递任意数量的参数到一个方法中,这些参数会被封装成一个数组。
- 其中在方法声明中,可变参数的类型后面跟着三个点
...
,表示这个方法可以接受零个或多个该类型的参数。(2)调用可变参数方法。
- 调用可变参数方法时,可以传递任意数量的参数,包括零个参数。
- 如下。
myMethod(); // 可以不传递任何参数 myMethod("Hello"); // 传递一个参数 myMethod("Hello", "World"); // 传递两个参数 myMethod("Hello", "World", "Java"); // 传递三个参数
(3)可变参数使用时的注意事项。
1、可变参数的限制。
- 一个方法只能有一个可变参数,并且它必须是参数列表中的最后一个参数!!!
2、可变参数的类型。
- 可变参数的类型必须是数组类型,例如:Object、String、int ...等。
3、关于数组的操作。
- 在方法内部,可变参数被视为一个数组。
- 因此,可以使用数组的方法和属性,如".length"属性来获取该数组参数的数量——>用于循环(fori等等)。
4、重载问题??
如果一个类有两个方法,它们的唯一区别是参数的数量,那么使用可变参数可能会导致编译错误,因为编译器无法区分这两个方法。如下。
public void myMethod(String... args) { } // 方法1 public void myMethod(String arg) { } // 方法2,这会导致编译错误,因为与方法1重载
5、使用时的性能问题。
- 虽然可变参数提供了方便,但在某些情况下可能会影响性能,因为它们在内部实际上是数组,这可能涉及到额外的内存分配和复制操作......(博主也不太清楚!!)
(4)关于Object... 数组变量名??
- 在Java中,Object... 表示一个可变参数。其中Object是参数的类型,而
...
表示你可以传递任意数量的Object类型参数。- 这种可变参数通常用于方法中,以允许传递不确定数量的不确定类型的对象。通用性比较高!
- 关于使用——>上篇博客(Jdbc工具类中调用查询或者增、删、改方法时的给sql语句中的"?"赋值用到)或者如下举例使用。
public class Example {// 一个接受可变数量Object类型参数的方法public void printObjects(Object... objects) {for (Object obj : objects) {System.out.println(obj);}}public static void main(String[] args) {Example example = new VarargsExample();// 调用printObjects方法,不传递任何参数example.printObjects();// 传递一个String类型的参数example.printObjects("Hello");// 传递多个参数,包括不同类型的对象example.printObjects("Hello", 123, 45.67, true);// 传递一个Object类型的数组Object[] objects = {"Another", 456, 78.90, false};example.printObjects(objects);} }
- printObjects()方法定义了一个可变参数 Object... objects,这意味着可以传递任意数量和类型的 Object 对象。
- 在 main 方法中,调用了 printObjects 方法多次,展示了不同情况下的调用。
- 第一次调用没有传递任何参数。
- 第二次调用传递了一个 String 类型的参数。
- 第三次调用传递了多个参数,包括 String、Integer、Double 和 Boolean 类型。
- 第四次调用传递了一个 Object 类型的数组。
- 注意,尽管 Object... 可以接受任何类型的对象,但在实际使用中,你可能需要对传递的对象进行类型检查或转换,因为它们都是以 Object 类型处理的。这可以通过类型转换或使用 instanceof 操作符来实现。