☕目录☕
🥡🥡🥡3.2.1 语法格式
🍺🍺3.3 方法调用的执行过程
🧇🧇🧇 3.3.1 方法调用的过程
🍖🍖🍖3.3.2 下面举例详细分析一下一个方法的执行过程
🍗🍗🍗3.3.3 代码示例
🍇🍇3.4 形参与实参的关系(重要)
🥤🥤3.5 有没有返回值的方法
🧊🧊🧊3.5.1 代码示例
🍿🍿3.6 方法的重载
🍟🍟🍟3.6.1 方法重载的概念
🍔🍔🍔3.6.2 方法重载的要求
🍕🍕🍕3.6.3 方法签名
🎵🎵🎵3.7.1 递归的必要条件
⌚⌚⌚ 3.7.2 递归过程的具体代码分析实例
📝总结
一、本节重点内容
-
掌握 方法的定义以及使用 ;
-
掌握 方法传参 ;
-
掌握 方法重载 ;
-
掌握 递归 。
二、思维导图
三、方法的概念和使用
3.1 什么是 方法
简单来说,方法就是一个 代码的片段,类似于C语言里面的函数。即:把一个功能给抽象出来了,使其变成一个模块;只需要传递相应的参数,便可以调用相应的方法,便可以调用这个功能。
那么,方法的存在具有哪些意义呢:
-
能够模块化的组织代码(当代码规模比较复杂的时候);
-
做到代码被重复使用, 一份代码可以在多个位置使用;
-
让代码更好理解更简单;
-
直接调用现有方法开发, 不必重复造轮子。
3.2 方法的定义
3.2.1 语法格式
【说明】
- 在Java里面,方法中 如果有返回值类型的话,那么方法体中一定要有返回值(并且与返回值类型相对应),否则会报错:
- 下面来列一个简单的例子:
【注意事项】
-
返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成void;
-
方法名字:采用小驼峰命名 ;
-
形参列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开;
-
在java当中,方法必须写在类当中;方法不能嵌套定义(各方法是同级别的,但可以嵌套调用);没有方法声明一说(即:只要方法定义在类里面即可,与 main函数 的位置无关) 。
3.3 方法调用的执行过程
3.3.1 方法调用的过程
【注意】
-
定义方法的时候,不会执行方法的代码, 只有调用的时候才会执行;
-
一个方法可以被多次调用。
3.3.2 下面举例详细分析一下一个方法的执行过程
【注意】Java中 从本质上来说,都是按值传递。
3.3.3 代码示例
实现 1! + 2! + 3! + 4! + 5! 的代码:
第一步:我们 写出一个数的阶乘的方法:
第二步:我们 把每一个数的阶乘 给加到一起:
第三步:可以调用以上方法来实现功能:
然后编译起来看结果:
3.4 形参与实参的关系(重要)
【说明】形参是实参的一份临时拷贝。
曾经,在C语言中 是用交换函数swap来介绍 形参和实参的:
3.5 有没有返回值的方法
方法的放回只有两种情况:有 或者 没有。
如果有,那么 返回值的类型 与 方法中要返回的类型 一一对应;
如果没有,那么 返回值的类型 需要变成 void,同时 方法中不能含有 return 。
3.5.1 代码示例
3.6 方法的重载
3.6.1 方法重载的概念
在Java中,如果多个方法的方法名相同,但是参数列表不同,那么 就称这几个方法重载了。
代码示例:
public class TestDemo {
/**
* 实现两个整数相加的
* @param a
* @param b
* @return
*/
public static int add(int a,int b){
return a+b;
}
/**
* 实现3个整数相加的
* @param a
* @param b
* @param c
* @return
*/
public static int add(int a,int b,int c){
return a+b+c;
}
/**
* 实现3个小数相加的
* @param a
* @param b
* @param c
* @return
*/
public static double add(double a,double b,double c){
return a+b+c;
}
public static void main(String[] args) {
System.out.println(add(1, 2));
System.out.println(add(1, 2, 3));
System.out.println(add(1.1, 1.2, 1.3));
}
}
如上,三个方法就是重载的。
3.6.2 方法重载的要求
- 方法名必须相同;
- 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同) ;
-
与返回值类型是否相同无关 。
3.6.3 方法签名
在同一个作用域中不能定义两个相同名称的标识符。比如:方法中不能定义两个名字一样的变量。
但是为什么在类中 可以定义 方法名相同的方法呢?
这就涉及到了 方法签名的概念,方法签名即:经过编译器编译修改过之后方法最终的名字。
具体方式为:方法全路径名+参数列表+返回值类型,构成方法完整的名字。
代码示例:
public class TestMethod {
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) {
add(1,2);
add(1.5, 2.5);
}
}
上述代码经过编译之后,然后使用JDK自带的javap反汇编工具查看,具体操作:
-
先对工程进行编译生成.class字节码文件;
-
在控制台中进入到要查看的.class所在的目录;
-
输入:javap -v 字节码。
方法签名中的一些特殊符号说明:
3.7 递归
在某些情况下,我们遇到的问题直接并不好解决,但是发现将原问题拆分成其子问题之后,子问题与原问题有相同的解法,等子问题解决之后,原问题就迎刃而解了。
3.7.1 递归的必要条件
- 自己调用自己;
- 有一个趋近于终止的条件(递归出口)。
【注意】写递归,需要提前推导它的一个递归公式。
3.7.2 递归过程的具体代码分析实例
代码示例:
public class TestDemo {
public static void func(int n){
if(n==1){
System.out.println(n);
return;
}
func(n-1);
System.out.println(n);
}
public static void main(String[] args) {
func(5);
}
}
图示:
【说明】正是由于每一次递归 都执行了一半,都要保存一下线程,这才会出现栈溢出的原因。
总结
这一话的需要知道的内容就这么多了,
下一篇博客打算分享一些递归的练习题,用来巩固一下所学的知识,同时也会“装备”到这篇博客上去;
当然啦如果铁铁们可以一键三连那就更棒了,特别特别感谢 ୧(๑•̀⌄•́๑)૭ 。