欢迎各位点赞👍评论✍收藏⭐
目录
1. 方法的含义
1.1 例子
我们先举一个例子:
假设有一位老师 “张三” ,在一次考试后,有一道题很难,那么学生 1 来问老师这道题咋写,学生 2 也来问老师咋写,学生 3 也来问老师咋写,很多学生都来问,这是老师想不可能给每一位学生都单独讲一遍,于是老师把这道题的解析录成一个视频,让学生们都去看,这样就解决了这个问题
- 这样老师把这个问题整理成视频,减少了时间的浪费
- 学生们自己点击视频,问题得到解决
- 老师避免一个一个学生去讲解
在编程中也有一样的思想,某一个功能需要反复使用,一遍一遍写出来又太过冗余,所以将这个功能封装起来(叫做 “方法”),需要它时,直接调用即可,节省了消耗
1.2 方法的概念
Java 中的 方法 其实就类似与 C 语言中的 函数,用来解决一些反复使用的 代码段
例:判断一个产品的重量是否达到标准 ( 0 < 重量 <10 为合格,重量 > 10 不合格 )
public class Test {
public static void main(String[] args) {
//产品1
int product1 = 4;
if(product1 > 0 && product1 < 10) {
System.out.println("合格");
} else {
System.out.println("不合格");
}
//产品2
int product2 = 12;
if(product1 > 0 && product1 < 10) {
System.out.println("合格");
} else {
System.out.println("不合格");
}
//产品3
int product3 = 6;
if(product1 > 0 && product1 < 10) {
System.out.println("合格");
} else {
System.out.println("不合格");
}
}
}
这样每有一个产品,就要判断一下,代码中重复代码较多,那么这就可以用 方法 来优化
2. 方法的定义
//方法的定义
修饰符 返回值 方法名称(参数类型 形式参数) {
代码块(代码实现)
return 返回值;
}
知道定义之后,就可以用方法来优化上面的例子
public class Test {
//封装方法来检查是否合格
public static void productCheak(int height) {
if(height > 0 && height < 10) {
System.out.println("合格");
} else {
System.out.println("不合格");
}
}
public static void main(String[] args) {
//多组产品
int product1 = 4;
productCheak(product1);
int product2 = 13;
productCheak(product2);
int product3 = 8;
productCheak(product3);
}
}
运行结果
这样优化之后,代码结构更加清晰了然,这就是方法的作用
3. 实参和形参
例;交换两个数的值
public class Test {
public static void swap(int x, int y) { //这里的 x y 为形式参数
int ret = x;
x = y;
y = ret;
}
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("交换前");
System.out.println(a + " " + b);
swap(a, b); //这里的 a b 为形式参数
System.out.println("交换后");
System.out.println(a + " " + b);
}
}
运行结果
这我们发现,代码是没错的,但是 a b 却没有交换,这是为什么?这就要探讨实参和形参的关系了
3.1 实参和形参的关系
在内存中,形参和实参是两个不同的实体,实参有一份空间,形参也有一份空间,形参把实参临时拷贝到自己的空间中,在自己的一份空间执行操作,不会影响实参的空间和内容,这就是为什么上述 a b 没有交换成功的原因,下面图解:
4. 方法的重载
在我们日常生活中,存在着一词多义的现象,例:
粉丝:可以指的是 某个明星有很多粉丝,还可以指 吃火锅时的 粉丝
那么在我们编程的方法中,一个方法也可以处理不用形参下的情况,这种就叫做方法的重载
例:写一个既能算整数相加也能算小数相加的重载方法 add
public class Test {
public static int add(int x, int y) {
return x + y;
}
public static double add(double x, double y) {
return x + y;
}
public static void main(String[] args) {
//整数
int a = 1;
int b = 5;
int c = add(a, b);
System.out.println(c);
//小数
double m = 1.9;
double n = 4.3;
double h = add(n, m);
System.out.println(h);
}
}
运行结果
方法重载的注意事项
- 方法名必须相同
- 参数列表必须不同(形参的类型,个数)
- 与返回值无关
5. 递归
递归着两个字的含义
递:依次进行下去 归:在依次归递回来
递归就一句话:自己调用自己
例;正打印一个数字每一位,(例:1234 打印 1 2 3 4)
- 我们可以想要打印 1234 每一位,我们拆开
- 先打印 1 在打印 234 每一位
- 在打印 2 在打印 34 每一位
- 在打印 3 在打印 4 每一位
public class Test {
public static void print(int n) {
if(n > 10) {
print(n / 10);
}
System.out.print(n % 10 + " ");
}
public static void main(String[] args) {
int n = 1234;
print(n);
}
}
运行结果
图解:(反复理解 “递” 和 “归” 的含义)
5.1 递归练习
- 斐波那契数列问题
- 青蛙跳台问题
- 汉诺塔问题
这些都不一一讲解了,有兴趣的可以自行研究,我往期博客也有
6. 小结
以上就是对方法和递归的了解,具体还需宝子们去实践,如果觉得该博客对你有用的话,希望一键三连,点个关注不迷路,谢谢支持!