函数 / 方法:是一个解决特定问题的代码块,该代码块可以被反复使用
1、定义函数
语法格式:
访问修饰符 方法返回值类型 方法名称([参数列表]) [抛出异常] {方法体;[return 返回值;]
}
访问修饰符:
- public 这是公共,所有都可以访问
- private 这是私有的,只能自己访问
- protected 这是受保护的,只能它自己或它的子类访问
方法返回值类型:
- 基本数据类型
- 引用数据类型
方法名称:符合标识符的命名规则。
参数列表:
- 它在方法中可以是无参数的,如果有多个参数,则参数与参数之间使用英文逗号分隔
- 参数的声明格式为:参数类型 参数名称
抛出异常:
- 此部分是可以没有,如果有则需要使用 throws 来向外抛出
- 如果有多个异常,则使用逗号分隔
返回值:
- 如果方法执行后需要有返回值,则必须使用 return 关键字来返回
- 方法的返回值类型要与 return 后面的值的类型一致
- 如果方法返回返回值类型(如 void),那么方法中也可以没有 return 语句,也可以有。如果有 return 后不能有值。
2、函数执行原理
每当调用一个方法时,系统会创建一个活动记录(也称为活动框架),用于保存方法中的参数和变量。活动记录置于一个内存去榆中,称为调用堆栈(call stack)。调用堆栈也称为执行堆栈、运行时堆栈,或者一个机器堆栈,常简称为“堆栈”。当一个方法调用另一个方法时,调用者的活动记录保持不动,一个新的活动记录被创建用于被调用的新方法。一个方法结束返回到调用者时,其相应的活动记录也被释放
3、函数重载
如果在一个类中有多个方法的名称相同,它的参数列表不同。那么这些方法就构成了重载方法
3.1 重载方法的特点
如何判断方法是否是重载方法,可以根据它的特点来判断。重载方法具有以下特点:
-
方法名称必须相同
-
参数列表必须不同(包括参数类型、参数顺序、参数个数)
-
与方法的返回值无关
-
必须是在同一个类中
4、函数的递归
所谓递归就是函数的内部调用其本身。在使用递归时,必须要有一个出口来退出递归的操作,否则需要产生栈溢出的错误
例:计算 6! 的值
1)非递归的实现:
public class MethodDemo04 {public static void main(String[] args) {int n = 6;System.out.println(recursion(n));}public static int recursion(int x) {int sum = 1;for (int i = x; i >= 1; i--) {sum *= i;}return sum;}
}
2)递归的实现
public class MethodDemo05 {public static void main(String[] args) {System.out.println(recursion(6));}public static int recursion(int x) {if (x == 1) return 1;else return x * recursion(x -1);}
}