JavaSE函数总结
函数是什么?
函数(function,通常又被称为方法)就是具有名称的特定功能代码的集合,解决了重复性代码的问题。
使用函数的目的是什么呢?
使用函数的目的就是是提高代码的复用度。
定义函数的格式
访问修饰符 [static] 返回值的类型 函数名称([形式参数列表]) {
// 函数体 由一行或者多行代码组成
// [return 返回值]
}
例:
public static int fun(int a, int b){
return a + b;
}
访问修饰符 :public 公共的 、protected 保护的、private 私有的
static 静态的
返回值的类型 :就是函数所实现的功能结果的数据类型。
函数名称 : 符合命名规则即可。
形式参数列表 : 用于接收实际参数, 可以没有,也可以有一个或多个。
函数体 :就是函数实现的功能的代码块。
返回值:即这个函数的功能的结果 ,由return带回调用地方,(如果返回值类型是void,可以不用写返回值),用return来实现。
注意:在Java中,函数是定义在类中,是类的成员
函数的参数传递
(1)形式参数:函数定义时的参数为形式参数==>简称 形参
(2)实际参数:函数调用时的参数为实际参数==>简称 实参
参数传递:只能由实参传给形参
注意:实参和形参在个数、顺序、类型上都要保持一致。
函数调用:
当函数定义完成后,不会自己执行,需要在主方法(main方法)中通过调用来执行
格式:函数名称([实际参数列表])
例:
public class Test {
public static void main(String[] args) {
int result = add(5,6); //调用函数
System.out.println(result); //11
}
public static int add(int a, int b){
return a + b;
}
}
函数本质是一个对象,存储在堆中,当调用时,会临时的压入栈中(push),等调用完成后,会立刻弹出栈(pop),所以函数调用就是瞬时操作
函数的分类:
- 通过函数是否存在参数:无参函数、有参函数
public static void function01(){ //无参函数
System.out.println("Hello World!");
}
public static void function02(int a, int b){ //有参函数
System.out.println(a + b);
}
- 函数是否需要返回计算结果:无返回值、有返回值
public static void function01(){ //无返回值
System.out.println("Hello World!");
}
public static int function02(int a, int b){ 有返回值
return a + b;
}
局部变量:
定义在函数内部的变量,叫做局部变量,局部变量的作用域只在当前函数中有效。
注意:在Java中没有全局变量,main函数中的变量也是局部变量,只是比较特殊,作用域还是main函数本身,但是生命周期是比较长。
函数重载(overload)
至少两个或者更多函数,函数名称相同,但是参数的个数或者类型 不同,从而在调用的时候,可以通过传参确定要调用的函数
注:函数重载,本质是对功能的扩展,不是代码的复用!!!!
例:
public static int fun(int a, int b){
return a + b;
}
public static int fun(double a, double b){
return a + b;
}
public static int fun(double x){
return x;
}
函数的递归(recursion)
所谓递归就是函数自身调用自身
注:如果要使用递归,必须有终止条件,没有终止条件的递归就是一个死循环!!
例:
求第n项的斐波那契数列的值
{0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89}
f(n) = f(n-1) + f(n-2)
import java.util.Scanner;
public class TestFibonacii {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入您要查询的项数:");
int n = sc.nextInt();
int f1 = fibonacii(n);
int f2 = fibonacii2(n);
System.out.println(f1);
System.out.println(f2);
}
//递归
public static int fibonacii(int n){
if (n == 0){
return 0;
}
if (n == 1){
return 1;
}
if (n == 2){
return 1;
}
return fibonacii(n - 1) + fibonacii(n - 2);
}
//循环
public static int fibonacii2(int n){
int first = 1, second = 2;
int temp = 0;
for (int i = 3; i < n; i++){
temp = first + second;
first = second;
second = temp;
}
return temp;
}