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),所以函数调用就是瞬时操作

函数的分类:

  1. 通过函数是否存在参数:无参函数、有参函数
public static void function01(){	//无参函数
	System.out.println("Hello World!");
}
public static void function02(int a, int b){	//有参函数
	System.out.println(a + b);
}
  1. 函数是否需要返回计算结果:无返回值、有返回值
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;
    }