一、跳转语句
Break
在switch中,用于结束case分支
在循环中,用于结束循环,继续进行下一次循环
Continue
跳过当前次循环,不执行循环体,继续进行下一次循环
BreakOutfor
如果想要让break和continue操作对应的外层循环
需要对外层循环设置个名字,然后通过 break 名字 ; continue 名字; 来操作对应的循环
名字可以随便取
二、方法
1.概念:一堆代码的集合,可用于完成一个特定的功能
优点 : 代码复用,易维护,易扩展,灵活度提高
2.方法声明:
修饰符列表 返回值类型 方法名 (参数列表) { 方法体 }
修饰符列表:可以有,可以没有,也可以有多个(需要用空格隔开),不区分顺序
包括: public 、private、protected 只能写一个,也可以不写
若用static修饰则为静态,不加就是成员
返回值类型 : 可以写十一种数据类型中任意一种,如果没有返回值,则写void
方法名:符合命名规则即可,小驼峰,强制与非强制
参数列表 :
可以没有,可以有多个,多个用逗号隔开
参数列表中的变量也是局部变量
方法体 : 就是方法中的功能代码
如果方法有返回值类型,则方法体内必须要有return语句,用于终止方法运行并返回结果
返回值类型要与return后的返回值类型一致
如果方法没有返回值类型,则return只能终止方法运行,不能返回数据
3.方法分类
成员方法 : 没有使用static修饰的方法
静态方法 : 使用static修饰的方法
构造方法 : 未接触
例:
// 无参无返回值的静态方法
public static void m1(){
System.out.println("m1方法执行了");
}
// 有参无返回值的静态方法
public static void m2(int a){}
// 多参无返回值的静态方法
public static void m3(int a,int b , double c){}
// 有返回值的静态方法
public static int m4(int a,int b , double c){
return 0;
}
4.方法调用
静态方法 : 类名.方法名(参数) 同类中类名可以省略
成员方法 : 对象.方法名(参数)
方法不调用不执行,调用才会执行
5.入参和出参
形参 : 形容参数,方法声明时,指定的参数列表,称为形参
实参 : 实际参数,调用方法时,传入的具体数据
入参:传入的数据
出参:传出的数据,即返回值
6.方法重载
定义:方法名相同,参数列表不同(个数不同、类型不同)、
优点:功能相同,名字相同,方便记忆,代码美观
例:
public static void sum(double a, double b) {
System.out.println(a + b);
}
public static void sum(long a, long b) {
System.out.println(a + b);
}
7.方法调用时类型转换
由低到高自动转换,例如,int会自动转换为long,且就近转换
三、内存分析
静态区/方法区
用来保存运行时的class文件及静态属性和方法
VM栈:是以栈数据结构为模型,开辟的一块空间
先进后出
栈帧 : 在栈内存中保存的数据空间
例:如果VM栈就是弹夹的话, 栈帧就是弹夹中的每一个子弹
栈底元素 : 第一个放入栈空间的栈帧
栈顶元素 : 最后一个放入栈空间的栈帧
压栈 : 把栈帧放到栈空间的过程,叫压栈
弹栈 : 把栈帧在栈空间中弹出的过程,叫弹栈
用于执行方法,每一个方法调用,就是一个栈帧
一般 main方法为栈底元素
//main方法中只有
public static void main(String[] args) {}
方法调用就等于压栈,方法执行完成就等于弹栈
堆内存:用于保存对象的(包括成员属性)
本地方法栈:和VM栈一样,只不过用于执行本地方法
四、递归
概念 : 递归就是在方法中调用当前方法,需要终止条件
直接递归 : 当前方法中对自身方法进行调用
间接递归 : A调用B,B调用A,A和B是两个方法
经典错误:
java.lang.StackOverflowError : 栈内存溢出,一般是因为一直压栈并没有弹栈导致,
错误原因:无终止条件出现死循环或者压栈过多导致
递归比较消耗内存且效率较低,当循环无法做到的时候就用递归
例如树状结构或文件夹的嵌套关系,需要获取某文件夹下的所有文件(包含子文件)
经典题型:斐波那契数列
前两位是1 , 后续每一位都等于前两位的和
1 1 2 3 5 8 13 21 34 55 89 ....
出题方式:有一对兔子,从第三个开始,每个月生一对兔子,新生的兔子也是从第三个月开始,每个月生一对兔子
,问,15个月后,有多少对兔子
public static int test(int n){//n在这个题中是月数
count++;
if (n == 1 || n == 2) {
return 1;
}else{
return test(n-1) + test(n-2);
}
}