首页 > 其他分享 >可变形参问题

可变形参问题

时间:2023-02-04 22:12:37浏览次数:40  
标签:String 形参 变形 void 个数 问题 static public

这篇文章主要介绍了Java语法糖之个数可变的形参的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

**1. 背景**

从JDK1.5开始,Java支持个数可变的形参,类似:

```java
public class ParamDemo {
public static void main(String[] args) {
String basketball = "篮球";
String football = "足球";
showSports(basketball, football);
showSportsByArray(new String[] { basketball, football });
}

/**
* 使用个数可变形参的方法
*/
public static void showSports(String... sports) {
for (String sport : sports) {
System.out.println(sport);
}
}

/**
* 使用1维数组作为形参
*/
public static void showSportsByArray(String[] sports) {
for (String sport : sports) {
System.out.println(sport);
}
}
}


```

**2. 优点**

其实个数可变形参的本质就是一位数组,但是如果上面的例子采用一位数组的话,写起来要更加麻烦点。

```java
public class ParamDemo {
public static void main(String[] args) {
String basketball = "篮球";
String football = "足球";
showSports(basketball, football);
showSportsByArray(new String[] { basketball, football });
}

/**
* 使用个数可变形参的方法
*/
public static void showSports(String... sports) {
for (String sport : sports) {
System.out.println(sport);
}
}

/**
* 使用1维数组作为形参
*/
public static void showSports(String[] sports) {
for (String sport : sports) {
System.out.println(sport);
}
}
}
```

**3. 注意事项**

3.1 位置只能在方法的最后

**由于个数可变的形参数量不确定,所以只能放到形参列表的最后。而数组形式的参数是可以放到形参列表任意位置的。**

 

 

3.2 ****

看下面的例子:

```java
public class ParamDemo {
public static void main(String[] args) {
String basketball = "篮球";
String football = "足球";
showSports(basketball, football);
showSportsByArray(new String[] { basketball, football });
}

/**
* 使用个数可变形参的方法
*/
public static void showSports(String... sports) {
for (String sport : sports) {
System.out.println(sport);
}
}

/**
* 使用1维数组作为形参
*/
public static void showSports(String[] sports) {
for (String sport : sports) {
System.out.println(sport);
}
}
}
```

编译就报错了,如下,说明啥?String...这样的形参其实还是编译为String[]运作的,所以不算重载。

```
Duplicate method showSports(String[]) in type ParamDemo ParamDemo.java
```

示例

```java
/**
* 可变个数形参的方法:
* javaSE 5.0 中提供了 Varargs(variable number of arguments)机制,
* 允许直接定义能和多个实参相匹配的形参,从而,可以用一种更简单的方式,
* 来传递个数可变的形参.
*
* 2.具体使用:
* 2.1 可变个数形参的格式: 数据类型...变量名
* 2.2 当调用可变个数形参的方法时,传入的参数个数可以是0个,1个,2个,。。。
* 2.3 可变个数形参的方法与本类中,形参不同的方法之间构成重载
* 2.4 可变个数形参的方法与本类中的方法名相同,形参类型也相同的数组之间不过程重载。换句话说,二者不能共存。
* 2.5 可变方法个数形参在方法的形参中,必须声明在末尾。
* 2.6 可变个数形参在方法的形参中,最多只能声明一个可变形参。
*/
//JDK 5.0之前:采用数组形参来定义方法,传入多个同一类型变量
//public static void test(int a,String[] books);
//JDK 5.0:采用可变个数形参来定义方法,传入多个同一类型变量
//public static void test(int a,String...books);
public class MethodArgsTest {
public static void main(String[] args){
MethodArgsTest test = new MethodArgsTest();
test.show(12);
test.show("hello");
test.show("hello","world","AA","BB");
// test.show(String[]{"AA","BB","CC"})
}
public void show(int i){

}
public void show(String s){
System.out.println("show(String)");
}
public void show(String...strs){
System.out.println("show(String ... strs)");
for (int i=0; i<strs.length;i++) {
System.out.println(strs[i]);
}
}
// public void show(String[] strs){

// }
//2.5
public void show(int i,String...strs){

}
}
```

标签:String,形参,变形,void,个数,问题,static,public
From: https://www.cnblogs.com/GO8k/p/17092507.html

相关文章

  • 重载和重写问题
    重写(Override)重写是子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己......
  • 值传递和引用传递问题
    一、堆、栈举个栗子:intage=22;Stringname=newString("shuaibei");这两个变量存储图如下:如果,我们分别对age、name变量赋值,会发生什么呢?age=18;name=newSt......
  • 向上和向下转型问题
    Java中对象类型之间的类型转换(前提是两个类是父子关系)1.向上转型:把子类对象直接赋给父类引用,自动进行类型转换。​静态方法/成员变量(包括静态变量和实例变量)同“父类引......
  • StringBuffer和StringBuilder问题
    在Java中字符串属于对象,Java提供了String类来创建和操作字符串。String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至......
  • 解决vuepdf不显示章印问题
    找到node_modules/pdfjs-dist/es5/build/pdf.worker.js这个目录if(data.fieldType==="Sig"){data.fieldValue=null;//pdf预览不显示红章问题......
  • ChatGPT 有哪些神奇的使用方式?使用chargpt写代码 搜索问题 写论文
    本教程介绍chargpt使用教程:不需要梯子,不需要注册,也不需要缴纳费用通过本教程您将会使用chargpt写代码搜索问题写论文。我展示了两个问题问题一:用python写一个学生信......
  • nginx相关配置问题
    nginx常用功能http代理正向代理和反向代理Nginx可以根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器,只要你正则写的没问题,......
  • netcore 部署问题集
    一、IIS    ①、x86部署问题1、错误信息(附截图):Couldnotfind'aspnetcorev2_inprocess.dll'.Exceptionmessage:2、错误信息(附截图):Failedtostartapplic......
  • 记一次使用gdb诊断gc问题全过程
    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处。简介上次解决了GC长耗时问题后,系统果然平稳了许多,这是之前的文章《GC耗时高,原因竟是服务流量小?》然而,过了......
  • stream流中toMap()api和Duplicate key问题
    1、指定key-value,value是对象中的某个属性值。Map<Integer,String>userMap=userList.stream().collect(Collectors.toMap(User::getId,User::getName));2、指定key......