函数的定义
-
概念: 实现特定功能的一段代码, 可反复使用.
-
定义语法:
-
public static void 函数名称() { //遵循标识符命名规范
//函数主体[功能代码]
} -
经验: 将需要在多个位置重复使用的一组代码, 定义在函数内.
定义的位置
-
函数定义在类的内部, 与main函数并列.
函数的调用
在需要执行函数代码的位置, 通过函数名称进行调用.
public static void printSign()
{
for(int i = 1; i <= 10; i++)
{
System.out.print("-");
}
System.out.println();
}
System.out.println("低头思故乡");
printSign();//调用自定义函数
-
注意: 调用函数时, 会优先执行函数内部代码, 结束后, 返回到函数调用处, 继续向下执行.
函数的参数
-
多数情况下, 函数与调用者之间需要数据的交互; 调用者必须提供必要的数据, 才能使函数完成相应的功能.
-
调用函数时, 所传入的数据被称为"参数"
形参与实参
-
定义语法:
-
public static void 函数名称( 形式参数 ) // 形参等于局部变量的声明
{
// 函数主体
} -
调用语法:
-
函数名称( 实际参数 ); // 实参等于局部变量的赋值
单个参数
//定义函数
public static void 函数名称( int a)
{
// 函数主体
}
函数名称(10);//调用函数
多个参数
//定义函数
public static void 函数名称( int a, char b)
{
// 函数主体
}
函数名称(10, '+');//调用函数
-
多参赋值的时候, 除了要注意数据类型, 数据顺序, 数据个数都要一一匹配
如何定义参数
-
经验: 根据具体的业务需求, 来定义函数的参数.
返回值与返回值的类型
-
函数调用时, 一些情况下无需返回结果; 另一些情况下则必须返回结果.
-
定义语法:
-
public static 返回值类型 函数名称( 形式参数列表 )
{
// 函数主体
return value; // 返回值
} -
规定返回值的具体类型: 基本 , 布尔, 引用
-
根据需求返回一个结果 ( 值 )
-
调用语法:
-
变量 = 函数名称();
return关键字
-
一个函数只能有一个返回值.
-
当有返回值的函数存在分支结构时,必须保证每一条分支都具有正确的返回值.
-
return的两种用法:
-
应用在具有返回值类型的函数中:
-
return value : // 表示结束当前函数, 并伴有返回值, 返回到函数调用处
-
-
应用在没有返回值类型(void) 的函数中:
-
return; //表示结束当前函数, 直接返回到函数调用处.
-
-
小结
-
注意: 一个类中可以定义多个函数, 函数之间属于并列关系, 不可嵌套
-
经验: 一个函数只做一件事. ( 单一职能原则 )
-
好处:
-
减少代码冗余
-
提高复用性
-
提高可读性
-
提高可维护性
-
方便分工合作
-
递归
多级调用
函数内部调用其他函数
-
递归: 函数内部自己调用自己.
-
无穷递归: 函数内部调用自身, 没有结束.
-
当函数自己调用自己时, 如果没有正确的出口条件, 则产生无穷递归.
递归
-
实际开发中,递归可以解决具有既定规律的特定问题
-
何时使用递归?
-
当需要解决的问题可以拆分成若干个小问题, 大小问题的解决方法相同
-
有固定规律, 函数中自己调用自己
-
-
如何正确使用递归?
-
设置有效的出口条件, 避免无穷递归.
-
-
递进:
-
每一次推进,计算都比上一次变得简单, 直到简单到无需继续推进, 就能获得结果. 也叫到达出口
-
-
回归:
-
基于出口的结果, 逐层向上回归, 依次计算每一层的结果, 直至回归到最顶层.
-
-
递归与循环可以相互解决.
总结
-
函数的概念:
-
实现特点功能的一段代码, 可反复使用
-
-
函数的定义:
-
public static void 函数名() { 函数的主体 }
-
-
函数的组成:
-
形参列表, 实参列表, 返回值类型, 返回值, 函数名, 函数主体
-
-
函数的调用:
-
函数名(实参...)
-
-
函数的好处:
-
减少冗余, 提高复用性, 可读性, 可维护性, 方便分工合作
-
-
递归:
-