可变参数
在JDK1.5引入可变参数,可变参数就是参数个数任意。
如果要计算任意个整数相加的和,我们的思路是将这些数放在数组里,但是有了可变参数后,不用new数组,直接传入要相加的数值。
可变参数定义格式:
public [static] [final] 返回值 方法名称([参数类型 参数名称][参数类型 ... 参数名称]){}
但是 ... 实际上是数组
对于上面任意整型相加分别用数组和可变参数代码如下:
//可变参数
public class ChangeEle
{
public static void main(String[] args)
{
System.out.println(add(new int[]{1,2,3})); //6
System.out.println(add(new int[]{1,2,3,4,5})); //15
//用可变参数
System.out.println(add1(1,2,3,4)); //10 可以传随意个数的整型
System.out.println(add1(1,2,3,4,5,6));//21
System.out.println(add1(new int[]{2,4,6})); //12 可以传数组
}
//形参是整数数组
public static int add(int a[])
{
int result=0;
for(int i=0;i<a.length;i++)
{
result+=a[i];
}
return result;
}
//形参是可变参数
public static int add1(int ... a) //可变参数,本质上是整型数组
{
int result=0;
for(int i=0;i<a.length;i++)
{
result+=a[i];
}
return result;
}
}
注意:
一个方法有且只能有一个可变参数,并且放在方法的最后一个参数
可变参数的本质是数组(如果是字符串 ,则是字符串数组;如果 是整型,则是整型数组)
//传入多类参数,将可变参数放在最后
public static void func(int data,String...str) //字符串数组
for–each
for–each是用于数组与类集的简单输出(如果需要修改,需要用for循环)
可以很好的避免数组越界。
for–each用法:
for(数据类型 临时变量 : 数组(集合)) {
// 循环次数为数组长度,而每一次循环都会顺序取出数组中的一个元素赋值给临时变量
}
如将一个整型数组进行输出:
int[] a=new int[]{1,2,3};
for(int val : a) //只要在数组长度里,将数组a里元素赋给val
{
System.out.println(val); //简单输出
}
静态导入:
假如定义了一个类Im,这个类里定义的都是静态方法,静态属性
package CODE.泛型;
public class Im
{
public static int add(int a,int b)
{
return a+b;
}
public static int sub(int a,int b)
{
return a-b;
}
}
在另一个包内需要调用package CODE.泛型包里的静态方法:首先需要导入Im类,然后用类名调用静态方法,代码如下:
package CODE.高级开发之泛型;
import CODE.泛型.Im;
public class ChangeEle
{
public static void main(String[] args)
{
System.out.println(Im.add(3,4)); // 通过导入Im类,用Im类名调用导入的静态方法
System.out.println(Im.sub(5,1));
}
}
但是在JDK1.5后,如果一个类里都是静态方法,通过静态导入后,可以直接调用该类的静态方法,这样就好比像在主类中定义的方法那样,可以被主方法直接调用。代码如下:
package CODE.高级开发之泛型;
import static CODE.泛型.Im.*; //导入Im类里的所有静态方法和属性
public class ChangeEle
{
public static void main(String[] args)
{
System.out.println(add(3,4)); // 静态导入后,直接调用静态方法
System.out.println(sub(5,1));
}
}
但是静态导入在实际开发中不建议使用。