四.方法
1.方法的引入
- 优点
- 实现了代码的复用
- 代码功能模块,便于后期代码的维护和管理
2.方法的定义(main方法由虚拟机用)
-
实现特定功能的一段代码
-
语法:【方法的各种修饰符】返回值 方法名(参数列表){方法主体}
-
方法的各种修饰符:public static属于方法的修饰符,目前必须加static
-
返回值:代表了方法执行完毕之后的一个结果,该结果可以为java支持的任意类型和void(没有结果)。
-
方法名:是一类标识符,命名规范与变量名一致
-
参数列表:用来接收使用者提供的外部的数据,来参与内部的运算。(参数扩展了函数的功能)。
- 参数:参与方法内部运算的数据
-
方法体:方法的主体功能。
-
3.方法的参数
-
如何定义参数
-
形参列表:代表了形式上参与了方法内部运算的变量;
-
语法:(数据类型 变量名1,数据类型 变量名2),变量的数量取决于需求。数据类型用来限定外部提供的数据的类型。
-
参数列表可以为空
-
参数的作用:
-
接收外部数据(真正参与方法内部运算的数据)
-
参数代表了定义的方法的需求:代表了使用方法的时候外部需要提供的数据的个数和种类。
-
定义方法是否需要定义看需求中是否有变化的量,如果有,就定义为参数即可。
-
-
-
传参(交换变量的值)
-
方法的调用的语法:方法名(实参列表); 实参列表的值和个数要和形参列表的一一对应。
4.方法的返回值
- java的返回值:
- 定义方法的返回值的内容可以是java支持的任意类型和void
- 如果一个方法知识实现了某个功能,不需要功能执行完毕后返回
5.方法的多种使用形式
- 返回值为void的方法的使用方式:方法名(实参列表);
- 返回值不是void的方法的使用方式
- 使用变量接收方法的返回值。
- 作为表达式的操作数使用
- 作为方法的实参使用。
- 直接调用。
6.方法的执行过程
- 程序执行,一旦遇到了方法的调用,那么就跳转到方法的定义处去执行这个这个方法体,方法一旦执行完毕,会返回方法的调用处继续执行。
7.方法传参交换变量
- 本质:形参变量分配内存并赋值的过程。
- 方法占用的内存是一定的
- 变量分类
- 局部变量:方法内定义的变量
- 成员变量方法外定义的变量
- jvm的内存管理分类
- 栈,是一种数据结构。数据结构:一组由【某种关系】组成的数据结构
- 栈数据结构的特点:先入后出。first in last out(FILO)
- 栈的构成:数据+栈顶指针(变量:记录要存放数据的位置),栈顶指针一开始指向栈底。
- 压栈push:将数据存入栈顶指针指向的位置,指针上移,指针继续指向栈顶。
- 出栈pop:先指针下移,指向栈顶数据,获取栈顶数据,指针继续下移
- 栈数据结构的特点:先入后出。first in last out(FILO)
- 栈内存:方法内的局部变量 stack
- 方法调用的时候,回归每个方法分配一个栈帧,所有的局部变量的内存在栈帧中分配。
- 当方法结束调用的时候,栈帧被回收。
- 堆内存:存储对象 heap
- 方法区内存:储存一些程序中不变的数据 method
- 栈,是一种数据结构。数据结构:一组由【某种关系】组成的数据结构
- 局部变量的特点
- 当方法被调用的时候,该方法中的所有局部变量在栈内存分配内存。
- 当方法使用完毕后,所有的局部变量都将被回收。
- 局部变量的生命周期从方法被调用开始,到方法结束。
- 形参都是局部变量。
- 传参:将实参的值赋值给形参的过程。
- 如果参数的类型是基本数据类型,那么参数的传递是值传递将实参的值赋值给形参。
8.多级调用
- 某个方法里调用另一个方法
9.方法的重载(overload)
- 概念:在同一个类的内部,多个方法方法名相同,方法参数列表数据类型不同,叫做方法的重载。
- 参数列表不同
- 数量不同
- 类型不同
- 顺序不同
- 参数列表不同
- 作用:方法名字相同,代表了实现的概念是一致的,参数列表不同,支持接收不同方法的类型的数据。
10.递归(recursion)
-
概念:一个方法直接或间接的调用了自己
-
递归应用的场景特点
- 问题可以分解为若干个子问题
- 子问题的解决方案和问题本身一致
- 问题的最终解决依赖于每个子问题的解决
- 必须有一个子问题可以直接解决
-
递归调用特点:
- 缺点:较为消耗栈内存,有可能造成栈内存溢出。
- 优点:代码实现比较简单