目录
概念
内部存放一段功能代码,作用为可以在不同位置多次执行,通常用来处理功能代码间的冗余问题
一个函数代表了一个功能
语法
完整版: 访问修饰符 static 返回值类型 函数名(形参列表){ //操作语句 }public static void 函数名(){ //操作语句 }
void : 表示没有返回值
位置
类以内,其他方法以外,与主函数平级
调用
函数想要执行,必须经过调用
函数名(实参列表)
函数名()
位置
想在哪执行,就在哪调用
执行![](https://i-blog.csdnimg.cn/direct/585dd4edcf464bb6ad5a1bb45fef4ae7.png)
只有当被调用函数执行结束回到调用位置之后,程序才能继续向下执行
参数
函数执行过程中不确定的数据
形参
形式上的参数。特点为没有具体值,只有声明部分,写在函数声明处的小括号内
实参
实际上的参数。特点为是一个具体值或拥有具体值结果的表达式,写在函数调用处的小括号内
关系
实参用来给形参赋值
一个参数
public static void 函数名(数据类型 形参名){ }
函数名(值|拥有结果的表达式)
使用
-
当声明的有形参时,调用函数时必须给予对应实参
-
执行流程:
-
参数列表:数据类型、个数、顺序
多个参数
public static void 函数名(数据类型 形参名1,数据类型 形参名2,..){ }函数名(值|拥有结果的表达式1,值|拥有结果的表达式2,..)package com.by.test; public class Test1 { public static void main(String[] args) { //输出一首诗,每句下方输出-作为分割 System.out.println("鹅鹅鹅"); //调用函数输出 10 - printLine(10,"-"); System.out.println("曲项向天歌"); printLine(15,"*"); // 15 * System.out.println("白毛浮绿水"); printLine(20,"+"); // 20 + System.out.println("红掌拨清波"); } //自定义函数:输出- public static void printLine(int num,String str){ for (int i = 1; i <= num ; i++) { System.out.print(str); } System.out.println(); } }
-
当参数有多个时,必须保证实参列表与形参列表保持一致
返回值
-
值:函数的执行结果
-
返回:操作,将值给到调用者
public static 返回值类型 函数名(参数列表){ //操作语句 return 值; }
return
-
作用:结束当前函数的执行,将值向上返回给调用者
-
向上:向调用者
-
-
return的值类型必须与函数声明的返回值类型一致
-
函数定义者和函数调用者不可同时操作返回值(不合理)
-
当调用者调用了有返回值的函数时,必须对返回值做出处理,否则会导致值无效
-
先接收,再处理(推荐)
-
先定义变量接收返回值,变量类型必须与函数声明保持一致
-
再操作变量
-
-
直接处理
public static void main(String[] args) { //定义变量接收返回值 int sum=method(100); System.out.println(sum % 2 == 0 ? "偶数" : "奇数"); System.out.println(sum*10); //直接处理 System.out.println(method(200) % 2 == 0 ? "偶数" : "奇数"); } //定义一个函数,传入整型参数n,计算1-n的和并返回。调用测试,并判断和是否为偶数 public static int method(int n){ int sum = 0; for (int i = 1; i <= n; i++) { sum += i; } //System.out.println(sum);//method自己处理sum return sum;//将sum向上返回交给调用者处理 }
-
-
执行流程:
-
当执行到return语句,表示函数运行结束,开始向上返回
-
-
return语句直属作用范围内下方不可存在其他有效语句
-
无法执行
-
-
当函数中存在分支时,必须保证每个分支都有可执行的return语句
-
当函数有返回值时,'三部曲'的处理方式:
-
在函数的最上方定义用来返回的变量,并赋予初始值
-
书写操作语句,根据不同情况给变量重新赋值
-
在函数的最下方return返回该变量
-
函数高级
函数的嵌套调用![](https://i-blog.csdnimg.cn/direct/ef6a6f1b69b04afc8723005318fb2373.png)
-
嵌套执行时,调用顺序与执行结束的顺序相反
-
只要逻辑完整,对嵌套层数不做要求
-
递归调用:(了解)
-
多个函数之间循环调用
-
自己调用自己
-
所有的递归都可以使用循环代替
-
JVM内存结构![](https://i-blog.csdnimg.cn/direct/1095f2b2b1ad40a38ac36ff7652415bb.png)
-
栈的特点:先进后出(FILO),只能操作栈顶元素
-
函数执行与栈的关系:每次函数的调用都会生成一条对应的栈帧,栈的执行是先进后出,所以函数的嵌套调用也是如此