下面是对第二周的学习总结。
一、方法。
这里的方法和c++中的函数一样,可对比起来理解。
定义格式:
访问权限 修饰符 返回值类型 方法名(参数列表) {
方法体
}
访问权限有:public、protected、private或者包访问权限(默认),这四种权限从 「最大权限」 到 「最小权限」 分别是: public > protected > 包访问权限> private,具体用法在后续介绍。
修饰符:static、final、abstract、synchronized……(具体含义后面慢慢介绍)。
返回值类型:可以是一些基本类型数据,若没有返回值,则类型为void。
方法名:命名规则与变量相同。
参数列表:可有可无,多个参数应用“,”隔开。
方法体:所需要执行的内容。
例如:
//无返回值类型,无参数列表
public static void test(){
System.out.println("HelloWord!");
}
//有返回值,有参数
public static int add(int a,int b)
{
return a+b;
}
函数调用与c++相同:
对象名.方法名(实参列表);
//可以先用一个变量接一下
int c = add.( 1 , 2 );
//System.out.println(c);
//也可直接打印
System.out.println(add.( 1, 2 ));
以上是按值传参,下面说明一个引用传参:
就是在参数列表中传入数组,实质传递的是数组的地址值。
注:当没有返回值是,想结束运行时,可以使用return;结束。
二、方法重载
同一个类中定义多个同名方法,只要它们的形参列表不同即可。如果同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,这种情况被称为方法重载。
方法重载的规则是:
1、同一个类中方法名相同。
2、参数列表不同。(个数、类型、顺序)
3、方法返回值类型、修饰符等,与方法重载没有关系。可同可不同。
实际调用时,会根据调用的方法中参数的类型、个数和顺序去匹配所对应的方法:
例如:
public void test(int a){
System.out.println(a);
}
public void println(double a){
System.out.println(a);
}
public void println(String s,double a){
System.out.println("价格为:"+ a + "元");
}
test(102); // 调用test(int a)方法
test(102.25); // 调用test(double a)方法
test("铅笔",2); // 调用test(String s,double a)方法
使用方法重载其实就是避免出现繁多的方法名,有些方法的功能是相似的,如果重新建立一个方法,重新取个方法名称,会降低程序可读性。
三、递归
简单说就是自己调用自己。
下面介绍一个典型的例子:
求N的阶乘
class Factorial{
public int factorial(int x){
if(x==1){
return 1;
}
return x*factorial(x-1);
}
}
下面来简单分析:
首先传入参数x,先判断x是否等于1,若成立则返回1,否则返回x*factoral(x-1),它不知道factoral(x-1)的值,所以会继续调用自己,直至最后的返回值为1,返回1,然后再倒回去,最终结果就变成了x*(x-1)*x(x-2)*……*1。
递归的三要素:
1、要有一个递归公式,比如上述x*factorial(x-1)。
2、要有一个终结点:factori(1),返回1。如果没有终结点,将一直递归下去,类似一个死循环。
3、递归的方向必须走向终结点。
再来一个典型的案例来理解递归:
斐波那契数列
//根据该数列的规律,第一项和第二项的值都是1,所以可以作为终结点,后面的数为前两个数的和,所以其递归公式可以是 method(n-1)+method(m-2)。
//具体代码如下:
public static int method(int n) {
//先表明终结点
if (n <= 2) {
return 1;
}
//再来写递归公式
return method(n - 1) + method(n - 2);
}
以上是我对java方法部分的学习和理解,若有不妥之处,敬请指出!