一、可变参数
引入:要求设计一个方法,用于计算任意参数的相加结果。
这个需求在早期只能通过数组的方式来实现
范例:
public class TestDemo1 {
public static int sum(int[] data) {
int sum = 0;
for (int i = 0; i < data.length; i++) {
sum += data[i];
}
return sum;
}
public static void main(String[]args){
System.out.println(sum(new int[] {1,2}));
System.out.println(sum(new int[] {3,78}));
System.out.println(sum(new int[] {15,29}));
}
}
缺陷:每次传值都要包装为数组的对象,数组也是引用数据类型,当我们要访问着若干个数字的某个数字时,只能通过数组下标访问。
JDK1.5之后追加了可变参数的概念,方法的定义格式:
public [static] [final] 返回值 方法名称([参数类型 参数名称][参数类型...参数名称]){}
范例:方法的可变参数
public class TestDemo1 {
public static int sum(int...data) {
int sum = 0;
for (int i = 0; i < data.length; i++) {
sum += data[i];
}
return sum;
}
public static void main(String[]args){
System.out.println(sum());
System.out.println(sum(3,78));
System.out.println(sum(15,29,67));
}
}
二、foreach循环
范例(原始数组的输出使用for循环完成):
public class TestDemo1 {
public static void main(String[]args){
int[] data = new int[]{1,2,3,4,5};//原始数组
for (int i = 0; i < data.length; i++) {
System.out.println(data[i]);//通过循环控制索引下标
}
}
}
从JDK1.5之后对于for循环的使用有了新的格式:
for (数据类型 临时变量 : 数组(集合)){
//循环次数为数组长度,而每一次循环都会顺序取出数组中的一个元素赋值给临时变量
}
即在for循环里无须使用索引来取数据
范例(使用foreach循环):
public class TestDemo1 {
public static void main(String[]args) {
int[] data = new int[] {1,2,3,4,5};//原始数组
for (int i:data) {//将数组中每个元素赋值给i
System.out.println(i);//这种循环避免了角标的问题
}
}
}
这种方式可以很好的避免数组越界问题,但这种数组的操作只适合简单输出模式。
三、静态导入
定义一个MyMath类,这个类提供了static方法。
范例(定义MyMath类):
public class MyMath {
public static int add(int x,int y) {
return x + y;
}
public static int sub(int x,int y) {
return x - y;
}
}
该类中所有的方法均为静态方法,按照最初的使用原则,首先导入MyMath类,然后通过MyMath类调用所有的静态方法。
范例(使用MyMath类):
public class TestDemo1 {
public static void main(String[]args) {
System.out.println(MyMath.add(10, 20));
System.out.println(MyMath.sub(30, 10));
}
}
从JDK1.5开始,如果类中方法全是静态方法,则可以直接把这个类的方法导入进来,这样就好比在主类中定义的方法那样,可以被主方法直接调用。
范例(静态导入):
package com.wfg.test;
import static com.wfg.demo.MyMath.*;//静态导入
public class TestDemo {
public static void main(String[]args){
System.out.println(add(10, 20));
System.out.println(sub(30, 10));
}
}
这种代码出现率不高,理解即可。