3.1 形参和实参
1:形参:方法定义中的参数 等同于变量定义格式 ,例如 : int number
2: 实参: 方法调用中的参数 等同于使用变量或常量,例如 10 number
3.2: 带参数方法练习(应用)
3.3 带返回值方法定义和调用
定义格式
public static 数据类型 方法名 (参数){
return 数据;
}
范例
public static boolean isEvenNumber(int number){
return turn ;
}
public static int getMax(int a, int b){
return 100;
}
注意:方法定义时 return 后面的返回值与方法定义上的数据类型要匹配。否则程序将报错
调用格式:
方法名(参数)
数据类型 变量名 = 方法名 (参数);
范例
isEvenNumber(5);
boolean flag = isEvenNumber(5);
注意:方法的返回值通常会使用变量接收,否则该返回值将无意义。
应用:
3.4 方法的重载
重载:指同一个类中定义的多个方法之间的关系,满足下列条件的多个方法相互构成重载
多个方法在同一个类中 多个方法具有相同的方法名 多个方法的参数不相同 ,类型不同或者数量不同。
注意:
重载仅对应方法的对应
3.4 : 内存划分
Java Runtime Data Area :java 运行时区域,一般叫jvm内存。
程序计数器:一块较小的内存区域,作用可以看作是当前程序执行的位置指示器
静态区: 保存程序文件(class 文件)以及静态数据,方法被调用之前,也保存在静态区,内部还有运行时常量池。
VM 栈: 又叫栈内存: 栈内存是以栈数据结构为模型开辟的的一段空间,特性是先进后出,
栈: 是一种数据结构,先进后出,像弹夹。
栈的构成因素:
栈空间:栈内存
栈帧:栈空间中的每一个栈元素,就叫栈帧(比如,弹夹中的每一个子弹就叫栈帧)
栈底元素:第一个放进去的栈帧
栈顶元素:最后一个放进去的栈帧
栈操作:
压栈:就是指把元素放入栈空间的过程
弹栈:就是把元素弹出去的过程
栈内存:是用来执行方法的,所有方法的执行,必须在栈内存进行
本地方法栈:用来执行做一些本地方法:hashCode等,模型和操作都和vm栈一致
堆内存:用来保存对象
3.5 运行机制:
1Java程序编写
2javac编译,得到class文件
3java命令,运行
3.1开启jvm,把运行的程序载入内存,把class文件保存到静态区
3.2加载完之后,jvm自动调运程序中的main方法
3.3在栈内存开辟栈帧,用来执行main方法
如果main方法中,没有其他方法调用,则运行完,弹栈,销毁。结束,jvm关闭
如果main方法中,有其他方法调用,再在main方法之上再开辟一个栈帧,用来执行新的方法,一次类推, 但是,如果调用的方法是别的类中的方法,则需要把对应的类先加载进来
方法调用: 就等于压栈操作
方法执行完成:就等于是弹栈操作
加载,静态加载,之程序开始运行,就把相关的所有文件全部一次性载入内存
动态加载,程序运行开始,只载入核心文件,当用到其他文件的时候,再去加载
Java中采用动态加载机制
3.6 递归 :方法中调用当前方法
递归思想:
递归和迭代时等价的,就是循环
基本思想就依次类推
应用场景 :
循环能做的,递归都能做,但是这种情况,优先使用循环,因为递归非常消耗内存,运行效率低,但是,像树状结构之类的,循环时没法做的,只能通过递归来搞定
常见的问题:
所有树状结构,文件夹复制,斐波那契数列
难点:不容易理解,递归思想 画图,栈帧调用图
注意,必须有终止条件,否则就等于死循环一样,导致一直压栈不会弹栈而出现的栈内存溢出问题
应用举例:
递归求和
斐波那契数列