一、方法 含义
在程序中储存特殊功能的代码块
好处- 提升代码重复利用率减低工作量。
- 提高代码的独立性,降低耦合性。
- 核心特点:不调用不执行。
- 方法属于调用结构,有两个关键性动作:
-
- 传参:方法与方法之间是互相独立的,自定义方法无法获取到调用者方法内的数据,所有需要通过传递参数的方式来实现。
-
-
- 实际参数(实参):调用方法时,有具体参数的。
- 形式参数(形参):声明方法时的参数,没有具体数值,只是数据的变量声明。
-
-
- 返回方法与方法间是独立的,调用者无法使用到自定义方法中的数据,需要结束方法的时候通过返回值进行返回使用。
修饰符 返回参数类型 方法名(形参类1 形参名2,形参类2 形参名2。。。){
方法体语句;
return 返回值;}
名词解释- 修饰符:给方法在内存中添加不同的加载或执行特点,暂不涉及,固定使用public static。
- 返回值类型:方法返回的数据类型
-
- 8种基本类型
- 引用类型
- void-空
- 方法名:简明知意
- 形参:方法之间由于作用域不同无法直接调用数据,所以调用方法需要通过形参将数据发送至被调用方法。
-
- 基本数据类型
- 引用类型
- 空
- 方法体语句:特殊功能代码块
- return:控制语句
-
- 结束方法
- 如果后面有返回值,结束的同时返回返回值给调用者方法。
- 返回值:方法的结果数据。
- 无返回类型填写void
- 基本类型
- 引用类型
- 空
- 基本类型
- 引用类型
- 如果方法属于对象,需要通过对象名进行调用。
- 如果方法属于类,通过类名调用。
- 如果调用同一个类中的方法,可以直接调用。
- 单独调用(直接调用)
-
- 方法名(实参);
- 输出调用(打印调用)
-
- System.out.println(方法名(实参));
- 赋值调用
-
- 数据类型 变量名 = 方法名(实参);
//通过方法判断两个整数是否相等
class Day04Demo{
public static void main(String[] args){
System.out.println(daXiao(10,10));
}
public static boolean daXiao(int a ,int b){
boolean duiBi = a == b;
return duiBi;
}
}
//通过方法计算1+2+3+......+100的值
class Day04Demo{
public static void main(String[] args){
System.out.println(num());
}
public static int num(){
int shuZhi = 0;
for (int i = 1;i <= 100;i++){
shuZhi += i;
}
return shuZhi;
}
}
void关键字
含义
无返回值,当没有返回值时,返回位置也不可以空着需要使用void占位。
注意事项
- 返回值为void时,方法调用格式只能选择单独调用(直接调用)。
- 不是void时,推荐使用赋值调用。
- 若返回值类型为void,方法体后面的return关键字可以不写。
在同一类(或子父类继承关系)中,出现了方法名相同,形参不同的现象。
方法重载的前提条件- 必须在同一个类(或者子父类继承关系)中
- 方法名必须相同
- 方法形参配置列表不同
-
- 形参个数不同
- 形参数据类型不同
- 形参数据类型顺序不同
调用重载时,具体执行那个取决于实参个数和数据类型
方法的递归 含义方法内部调用自身的现象
分类- 直接递归
- 间接递归
- 如果使用递归,就需要给方法添加递归的限定条件,否则会发生栈内存溢出。
- 即使含有递归的限定条件,也不要将递归层数过多,否则会发生栈内存溢出。
在实际场景使用for或while不便于 *** 作,可以通过方法的递归进行简化。
例如:便历多级文件夹啊。
例题递归的弊端
/*
需求:
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问指定月份的兔子对数为多少?
规律:
第一个月:1
第二个月:1
第三个月:2
第四个月:3
第五个月:5
第六个月:8
第七个月:13
第八个月:21
...
规律:从第三个月开始,每个月的兔子对数是前两个月的兔子对数之和
第一个月和第二个月的兔子对数都是1
*/
class Demo {
public static void main (String[] args) {
long num = tuZi(3);
System.out.println("兔子的总对数:" + num);
}
public static long tuZi(int month){
if (month == 1 || month == 2){
return 1;
}
return tuZi(month - 1) + tuZi(month -2);
}
}
//兔子生兔子——for动态规划
public static long tuZi(int month){
long month1 = 1;
long month2 = 1;
long month3 = 0;
if (month == 1 || month == 2){
return 1;
}
for (int i = 3;i <= month;i++){
month3 = month1 + month2;
month1 = month2;
month2 = month3;
}
return month3;
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)