一、方法:
具有特定功能且能被重复调用的代码块(段)称为方法。
1.1 一般方法:
public class Test01{ //(public:访问修饰符 static:表示静态属于类 执行堆栈在共享区 谁都可以访问 int:返回值类型 add(int a,int b):方法名(参数1,参数2,…)) public static int add(int a,int b){ int c = a + b; return c; } public static void main(String[] args){ // 方法的调用 int m = 10; int n = 20; int r = 0; r = add(m,n); System.out.println("r = " + r); } }
解析:
修饰符:决定了方法的工作范围还有(protected friendly private 如果不写默认是default);
返回值类型:必选,如果没有返回值,须写void。方法只能返回一个值
方法名:符合标识符命名规则
参数列表:可以0个、1个、多个,需要同时说明类型。称为形式参数
方法体:完成具体功能。如果有返回值,必须有return语句;如果没有返回值,默认最后一条语句是return,可以省略。
add(m,n)表示方法的调用,在方法调用过程中,传入add方法中的m,n是方法调用的实际参数,称为实参。
方法add在定义时的参数a,b称为形式参数,简称形参。
实参传递给形参的过程,称为方法调用过程的传值。
方法在调用(执行)过程中,会产生一个内存空间,这个内存空间就是方法执行时需要的内存空间,称为方法执行堆栈。
1.2 方法的重载:
java中,一个类中可以定义多个同名但参数列表不同的方法,这些方法构成了方法重载(overload);
方法重载的判断
[1] 同一个类
[2] 同一个方法名(方法名相同)
[3] 参数列表不同
参数列表不同的理解,满足以下其中一个条件即可。
[1] 参数个数不同
[2] 参数类型不同
[3] 参数顺序不同
java中,方法存在一个签名(method sign),签名由 方法名(参数类型1,参数类型2,…)构成。
show(String)
add(int,int,int)
=>
在同一个类中,方法名相同,但方法签名不同的方法构成方法重载。
方法重载和返回值无关、方法修饰符无关。
二、递归:
方法自身调动自身的过程称为递归;
2.1 特点:
一个问题可被分解为若干层简单的子问题;
子问题和其上层问题的解决方案一致;
外层问题的解决依赖于子问题的解决;
public static long fact(int n){ long sum = 1; for(int i=1;i<=n;i++){ sum *= i; } return sum; }
public class Test04{ // 求n的阶乘 public static int fact(int n){ if(1 == n){ return 1; } return n * fact(n-1); } public static void main(String[] args){ int r = fact(1); System.out.println("r = " + r); } }
2.2 递归优缺点:
递归的优点:
简单的程序;
递归的缺点:
但是递归调用会占用大量的系统堆栈,内存耗用多;
在递归调用层次多时速度要比循环慢的多;
递归的使用场合:
任何可用递归解决的问题也能使用迭代解决;
当递归方法可以更加自然地反映问题,并且易于理解和调试,并且不强调效率问题时,可以采用递归;
在要求高性能的情况下尽量避免使用递归,递归既花时间又耗内存;
三、一般方法与递归的内存图:
方法:
递归: