方法
一、方法的意义
方法是实现某个特定功能的代码块,可以通过灵活改变参数和返回值实现需求
之前学习方法时我们使用的固定的main方法,一旦需求的参数改变时,就得改代码。
没使用方法前
public class AddSubMulDiv { public static void main(String[] args) { System.out.println(10+5); System.out.println(10-5); System.out.println(10*5); System.out.println(10/5); System.out.println(12+5); System.out.println(12-5); System.out.println(12*5); System.out.println(12/5); System.out.println(14+5); System.out.println(14-5); System.out.println(14*5); System.out.println(14/5); System.out.println(17+5); System.out.println(17-5); System.out.println(17*5); System.out.println(17/5); } }
使用了方法
public class AddSubMulDiv { public static void main(String[] args) { add(10,5); add(12,5); add(14,5); add(17,5); } public static void add(int a,int b){ System.out.println(a+b); System.out.println(a-b); System.out.println(a*b); System.out.println(a/b); } }
二、方法的基本语法
语法:
修饰符列表 返回值类型 方法名 (参数类型 变量名){方法体}
public static void main(String[] args){}
其中返回值类型和参数类型可以是基本数据类型和引用数据类型
根据参数和返回值,我们把方法分为四种,
-
有返回值有参数
-
public static int fun1(int a){}
-
-
有返回值无参数
-
public static int fun2(){}
-
-
无返回值有参数
-
public static void fun3(int a){}
-
-
无返回值无参数
-
public static void fun4(){}
-
三、函数的返回值和参数的意义
自定义函数和main函数都处于类体中,main不能包含自定义函数
大多数时候建议写返回值,因为更灵活,可以选择返回也可以选择不返回
返回值可以直接输出也可以被同类型函数接收
四、方法之间的调用问题
直接调用
-
避免两个方法相互调用
-
避免递归产生(自己调用自己)
五、递归
package com.szwollf.Day04; public class DemoSelf { public static void main(String[] args) { calc(10); } public static int calc(int n){ n = n/2; System.out.println(n);//5 2 1 0压栈 if (n > 0) { calc(n);//调用自己 } System.out.println(n);//0 1 2 5出栈 return n; } }

如上图所示,函数在每进入下一层的时候,当前层的函数并未结束,它必须等它调用的下一层函数执行结束返回后才能继续往下走。 所以最下面的那句print(n)会等最里层的函数执行时才会执行,然后不断往外退层,所以会出现0、1、2、5的效果
递归特性:
-
必须有一个明确的结束条件
-
每次进入更深一层递归时,问题规模相比上次递归都应有所减少
-
递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
递归通常用于多级菜单
六、栈内存结构

先压后弹

String s1="abc"; String s2="abc1"; // System.out.println(s1==s2);//是否相等,不能这么用 boolean b = s1.equals(s2); //比较s1和s2是否相等 System.out.println(b);

浙公网安备 33010602011771号