方法的定义:是一个代码片段,类似于C语言中的函数
1.能够模块化的组织代码,使代码条理清晰,更易于理解。
2.可以使代码被重复使用,可以被随需要调用。
方法必须定义类的内部,方法内部不可以定义函数,要在成员级别
方法的定义语法:
可选的修饰符们 、方法的返回值的类型、 方法的名称(参数列表){
具体语句
}
public static void main(String[] args){
add(2,1);
sub(4,3);
}
public static void add(int a,int b){
System.out.printf("%d",a+b);
}
public static void sub(int a,int b){
System.out.printf("%d",a-b);
}
主函数中
*修饰符:public static
返回值类型:void
方法名称:main
参数列表:(String[] args)
方法的调用:
1.不关心返回值的方法调用
方法名称(实参列表)
2.关心返回值的方法调用(会涉及到整型提升,转化为高等级;需要转化低等级需要专门语句,不可自行转化)
形参(paramaters) 实参(arguments)
关于内存模型:冯诺依曼体系
1.cpu 2.内存 3.输入 4.输出(134部分和2直接打交道)
局部变量、形参在内存中的位置
1、Java中对内存的分配 (运行时期)
1.栈区(stack) 2.堆区 3.方法区
方法调用在内存中发生的事—栈帧(stack frame)
Main ->add ->sub
2.每一次方法调用,都会在栈中产生一个独有栈帧(调用帧),每次方法执行结束,栈帧就会消亡。
Main 形参args 局部变量a/b (存放的不在一个空间内)
3.形参和实参之间的关系是:值拷贝。
值拷贝方法调用过程中:形参的值改变不会影响实参的值。
嵌套调用
关于return出现地方导致得结果
Return在前直接返回,不看后面的结果
方法的重载:
Java编译器是定位一个方法
方法名称+参数列表 唯一确定一个方法
方法重载:方法名称相同,参数列表不同Overload
(返回值类型不影响重载)
递归:本身在Java语法上是没有特殊性
在一个方法中,调用自己本身的方法
解决问题:数学归纳法
递归方法的编写
1、 不建议做过早的栈帧展开
2、 局部原则:站在一个层级不要动,思考问题的解决
- 递推公式是什么
- 终止条件是什么
总览: 方法method
- 语法:如何定义 四部分 //运行时期
- 如何调用 名称(实参列表)
- 专门学习嵌套调用
方法的内存模型 - 内存区域 栈/堆/方法
- 栈帧