jdk新特性之可变参数

Jdk1.5新特性之可变参数

在java SE5.0之前的版本中,每个java方法都有固定数量的参数。但从java SE5.0之后,java允许定义形参长度可变的参数,从而允许为方法指定数量不确定的形参。格式是在定义一个方法时,在最后一个形参类型后增加三个点(...),则表明该形参可以接受多个参数值,多个参数值被当成数组传入。

 如果有这样一个需求,就是计算两个数之和,很容易我们会想到这么做,如以下代码:

public static void main(String[] args) {

int sum=add(4,5);

System.out.println("累加和:"+sum);

}

  private static int add(int i, int j) {

return i+j;

}

但如果要计算三个数之和呢?很容易想到方法的重载,即在定义个add方法,让它接受三个参数,但如果需求不确定呢,不知道要几个数相加呢?那怎么办?你该定义几个参数的方法呢?

因此jdk1.5出现了一种新方法可变参数。上面代码可以写成这样:

public static void main(String[] args) {

int sum=add(4,5);

System.out.println("累加和:"+sum);

}

private static int add(int...arr) {

int sum=0;

for(int i:arr){

sum+=i;

}

return sum;

}

还有一种定义如下:

public static void main(String[] args) {

int sum=add(4,5,7);

System.out.println("累加和:"+sum);

}

private static int add(int a,int...arr) {

int sum=0;

for(int i:arr){

sum+=i;

}

sum+=a;

return sum;

}

可以看到方法定义参数时,在可变参数前面还定义了一个参数,这是允许的,并且前面可以定义n多个参数,但是需要注意的是,在可变参数的后面是不能在定义参数的,也就是说,可变参数只能出现在最后一个参数出现在形参当中,这样也就说明了一个方法中最多只能有一个可变的形参。

其实在jdk1.5之前也是可以解决上述的问题的,那时候的可变参数使用数组来代替的,由此上面的代码可以写成这样子:

public static void main(String[] args) {

int sum=add(new int[]{4,5,7});

System.out.println("累加和:"+sum);

}

private static int add(int[] arr) {

int sum=0;

for(int i:arr){

sum+=i;

}

return sum;

}

jdk1.5之前是这样做的,当然那时候也没有增强for循环了,不过我只是举这个例子来说,读者不需要太纠结了。其实就我的理解,可变参数内部实现的也是个数组,为什么这么说呢?因为你可以对它用增强for迭代,而且还可以利用索引取值。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是JDK2到JDK17每个版本的主要新特性,新功能和改动内容: JDK2:引入了JavaBeans、JDBC、JAR、RMI等技术,使得Java更加易于开发和使用。 JDK3:引入了Java Server Pages(JSP)和Java Message Service(JMS)等技术,使得Java在Web应用和消息传递方面更加强大。 JDK4:引入了NIO、Java Web Services(JWS)、Java Management Extensions(JMX)等技术,使得Java在网络编程和系统管理方面更加出色。 JDK5:引入了泛型、自动装箱/拆箱、枚举类型、注解、可变参数等特性,使得Java语言更加强大。 JDK6:引入了JDBC 4.0、Java Compiler API、Java Web Start等技术,使得Java在数据库访问、编译和应用启动方面更加高效。 JDK7:引入了switch语句支持字符串类型、try-with-resources语句、Diamond语法、Fork/Join框架等特性,使得Java语言更加易于使用和高效。 JDK8:引入了Lambda表达式、Stream API、Date/Time API等特性,使得Java在函数式编程、数据处理和日期处理方面更加强大。 JDK9:引入了模块化系统、JShell、多版本兼容性等特性,使得Java在模块化、交互式开发和版本管理方面更加出色。 JDK10:引入了局部变量类型推断、线程局部变量回收等特性,使得Java语言更加简洁和高效。 JDK11:引入了HTTP客户端API、ZGC垃圾回收器等特性,使得Java在网络编程和性能方面更加优化。 JDK12:引入了Switch表达式、JVM常量API等特性,使得Java语言更加易于使用和扩展。 JDK13:引入了文本块、动态CDS等特性,使得Java在字符串处理和性能方面更加出色。 JDK14:引入了Switch表达式增强、Records、Pattern Matching for instanceof等特性,使得Java语言更加简洁和易于使用。 JDK15:引入了Sealed Classes、Text Blocks、Hidden Classes等特性,使得Java在类设计和字符串处理方面更加出色。 JDK16:引入了Records增强、Vector API、Foreign Linker API等特性,使得Java在数据处理和性能方面更加优化。 JDK17:引入了Pattern Matching for switch增强、Sealed Classes增强、Foreign-Memory Access API等特性,使得Java语言更加易于使用和高效。同时,JDK17还引入了一些性能和安全方面的改进。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值