方法使用
方法就是一个 代码片段 . 类似于 C 语言中的 " 函数 " 。
方法(代码片段)定义:
public class Method{
// 方法的定义public static int add(int x, int y) {return x + y;}
}
修饰符(public static) 返回值类型 方法名称([参数类型 形参]){
方法体代码;
[return 返回值];
}
方法调用
需要开辟内存--方法调用结束 内存销毁
过程:调用方法--传递参数--找到方法地址--执行被调用方法的方法体--被调方法结束返回--回到主调方法继续往下执行
定义方法不执行方法代码只有调用才执行;一个方法可调用多次
方法传参
形参:函数中自变量,用来保存函数在调用传递的值
实参:拷贝到形参中,形参和实参本质是两个实体
方法重载
指方法名相同,但是参数列表不同(参数的个数、参数的类型、类型的次序),与返回值类型是否相同无关
在方法名相同的情况下,这三个只要有一个不同
,那么这个方法就会被重载;
两个方法如果仅仅只是因为返回值类型不同,是不能构成重载的(编译出错)
方法签名
在同一个作用域中不能定义两个相同名称的标识符。(方法中不能定义两个名字一样的变量)
类中可以定义方法名相同的方法--方法签名即:经过编译器编译修改
过之后方法最终的名字
。
具体方式为:方法全路径名+参数列表+返回值类型,构成方法完整的名字。
使用JDK自带的javap反汇编工具查看,具体操作如下:
- 先对工程进行编译生成.class字节码文件
- 在控制台中进入到要查看的.class所在的目录
- 输入:javap -v 字节码文件名字即可
方法签名中的一些特殊符号说明:
[--引用类型,以L开头,以;结尾,中间是引用类型的全类名
递归
定义
一个方法在执行过程中 调用自身 , 就称为 " 递归 ".
递归相当于数学上的 " 数学归纳法 ", 有一个起始条件 , 然后有一个递推公式
必要条件
1. 将原问题划分成其子问题,注意:子问题必须要与原问题的 解法相同
2. 递归出口
调用栈
方法调用的时候, 会有一个 "栈" 这样的内存空间 描述当前的调用关系 . 称为调用栈.
每一次的方法调用就称为一个 " 栈帧 ", 每个栈帧中包含了这次调用的参数是哪些, 返回到哪里继续执行等信息
运用递归求斐波那契数
public class test {public static void main(String[] args) {System.out.println(fib2(3));System.out.println(fib2(6));}
public static int fib2(int n){if(n==1||n==2){return 1;}int f1=1;int f2=1;int f3=1;for(int i=3;i<=n;i++){f3=f1+f2;f1=f2;f2=f3;}return f3;
}
可以使用循环来减少递归中的数据冗余
public static int fib(int n) {int last2 = 1;int last1 = 1;int cur = 0;for (int i = 3; i <= n; i++) {cur = last1 + last2;last2 = last1;last1 = cur;}return cur;