首先先讲一个形参长度可变的方法,从JDK1.5以后,Java允许定义形参长度可变的参数,从而允许为方法指定数量不确定的形参。
这个方法不错,以后用的时候可能会很简单,减少麻烦了;
形参长度可变的方法定义:如果在定义方法时,在最后一个形参的类型后增加三点…,则表明该形参可以接受多个参数值,
多个参数值被当成数组传入。
例:
public static void outClassInfo(String cname,String…sname){
//在方法体内将参数sname当成是数组 }
for (String student : sname){
System.out.println(student);
}
//在方法体内,将参数sname当成数组处理
形参长度可变的方法调用:
outClassInfo(“08软件技术”,“李四”,“王五”,“赵六”);
//如果 String…sname在 String cname前边,那摩后面的字符串将都是sname;
|
|
传递给形参cname 这三个传递给形参sname;
以可变个数形参来定义方法
public static void outClassInfo(String cname , String... sname);//调用可变形参的方法,更加简洁;
采用数组形参来定义方法
public static void outClassInfo(String cname , String[] snames)
//调用数组形参来声明的方法,必须传给该形参一个数组,outClassInof(“09软件”,new String[]{“王五”,“李四”});
这两个方法签名的效果虽然一样,但还是有区别的:
数组形式的形参可以处于形参列表的任意位置,但个数可变的形参只能位于形参列表的最后;
好的现在开始讲递归和重载,这两个其实吧不是特别难,但也不是挺简单,我本人认为吧这个重载可能更简单一些;
递归: 如果一个方法定义中直接或间接调用它本身,就是方法的递归调用。
递归体:递归的方式
递归方法一般由两部分组成:
递归出口:递归终止的条件
;
我把我写的一个递归来巨一下例 ;
例4.11已知有一个数列:f(1)=1,f(2)=1,f(3)=2;f(4)=3;f(5)=5…, f(20);
class Test
{
public static int fn(int n)
{
if(n==1)//递归的出口
return 1;
else if(n==2)
return 1;//递归的出口
else
return fn(n-1)+fn(n-2);//递归表达式,
}
public static void main(String[] args)
{
System.out.println(fn(20));//递归方法
}
}
编写程序,计算10的阶乘。
public static long calc(int n)
{
if(n==1)
{
return 1;
}else
{
return n*calc(n-1);
//以前写阶乘都是用for,现在这样也可以的O '
}
}
其实这个递归关键是找到表达式,这样就好办多了,所以数学好还是有一定用处的;
重载: Java语言允许在一个类中定义几个同名的方法,但要求这些方法具有不同的参数特征,这种做法称为方法的重载;
不同的参数特征包括:
参数个数:int GetSort(int x); int GetSort(int x,int y);
参数类型:int GetSort(int x); int GetSort(double x);
参数次序:int GetSort(int x,double y); int GetSort(double x,int y);
返回值类型不是重载的依据,如果返回值类型不同这就不叫重载了;
重载方法的调用:当类中有多个重载的方法,调用该类的某个重载方法时,Java能够根据实参表的不同区分实际调用的是哪一个方法。
重载方法中有一个带可变长度的形参。
public void test(String msg);
public void test(String… books);
则, olv.test(); //调用test(String… books);
olv.test(“aa”,”bb”); //调用test(String… books);
olv.test(“aa”); //调用test(String msg);
其实只要掌握住方法,按照各个方法的基本样式,理顺一下思路,其实也就不难了,除了极个别特别抽象的,那就无语了!!!