嵌套循环:
特点:
1:图形输出:外层循环代表行,内层循环代表列
2:执行流程:外层循环执行一次,内层循环执行一遍
3:break和continue只能作用于直属的循环层次
4:只要循环完整,嵌套层数没有要求,但是通常不超过两层(如果层数太多,性能会受到影响)
今日掌握:
一:函数的完整语法
二:形参和实参的区别
三:什么是参数列表
四:返回值的使用
一:函数
概念:函数是一段具有特定功能的代码块,
特点:可以在不同的位置多次调用执行,解决了功能代码重复冗余问题
代码样式:
//访问修饰符 返回值类型 函数名(形参列表){
//操作语句
}
public static void 函数名(){
//操作语句
}
函数(方法)的位置
类的内部,其他函数的外部,与主函数平级,(建议写在主函数下方而非上方)
自定义函数的调用:
自定义函数要想执行,必须经过主函数中的调用才可以
代码样式:
函数名(实参列表)
函数名();
调用位置:(哪里不会点哪里)想在哪里调用就在哪里调用
参数
参数是表示函数中不确定的因素,分为形参和实参
形参:形式上的参数
特点:没有具体值,只有声明部分,写在函数的声明处的小括号内
实参:实际上的参数
特点:是一个具体值或者拥有具体值结果的表达式,写在函数调用的小括号内
一个参数
代码样式:
形参:
public static void 函数名(数据类型 参数名){
//操作语句
}
实参:
函数名(值);
注意:当存在形参时,必须使用实参给形参赋值
多个参数
代码样式:
public static void 函数名(数据类型 参数名1,数据类型 参数名2,数据类型 参数值3,...){
//操作语句
}
调用:函数名(值1,值2,值3....)
注意:实参列表必须跟形参列表保持一致
特别注意:数据列表:数据类型、个数、顺序
形参不可以同时声明
代码样式对比:
public static void method(int a,int b){}//是正确的
public static void method(int a,b){}//是错误的(不能这样写)
返回值:
返回值是一个具体值,特点是可以向上(调用者)返回
代码样式:
public static 返回值类型 函数名(形参列表){
//操作语句
return 值;
}
注意:这里以主函数为例
public static void main(string[]args){}
其中:第一:void的含义是没有返回值,故无需向上返回数据
第二:如果函数声明的有返回值,则内部必须通过return语句将值向上返回
第三:当调用一个拥有返回值的函数时,调用者必须做出后续处理,否则返回值没有意义
定义变量接收返回值,再操作变量
数据类型 变量名=函数名(实参列表);
变量的数据类型应与函数声明的返回值保持一致
直接操作返回值
代码举例:
System.out.Println(函数名(100)%2==0?"偶数":"不是偶数");
注意:这里不建议用直接操作返回值这种方法,极不方便修改,又不美观
同一直属作用范围内,return语句下方不可存在其他有效语句
原因是无法执行
如果函数中存在分支,则必须保证每种情况都有可能被执行的return语句
三步曲
当分支情况较多时,为了方便书写和阅读,建议使用三部曲
第一步:在函数最上方定义用来返回的变量,并赋予初始值
第二步:再函数操作语句中根据不同的情况为变量重新赋值
第三步:再函数的最下方return该变量(return 变量名)
函数高级:
函数的嵌套调用
1、函数嵌套调用时,调用顺序与执行结束的顺序相反
2、当调用的函数执行结束,调用者才有可能执行结束
3、只要逻辑完整,嵌套层数不做要求
jvm内存结构
1、JVM内存主要有栈和堆组成,(主要有,还有一些其他的我还没有学到)
2、栈的特点:先进后出(FILO),永远操作栈顶元素
3、每当函数调用时,都会生成一条对应的栈帧。栈帧的执行特点决定了函数嵌套调用时的执行特点
递归
1、自己调用自己或者函数之间循环调用
2、当进行递归调用时,会持续僧成栈帧,如果没有跳出条件,则最终栈帧会将内存撑满,程序则会强制终止
3、return;可以强制停止程序剩余内容的执行
注意:可以作用于递归,在递归过程中满足某个条件时,通过returnl;截止递归
特别提醒:能够使用递归实现的操作都可以用循环代替