Java基础——函数
一、函数的基本使用
函数的定义
函数是计算机编程中非常重要的部分,是编程中最基本的元素之一。函数表示的是一 种通用的过程,这种过程能够对外界提供服务。例如,现实生活中,ATM 取款机上有不同 的功能,我们可以理解为 ATM 机上具有不同的函数可以调用;我们在 ATM 机上取钱,就 可以理解为我们在 ATM 机上调用了“取钱”函数。在这种关系中,我们是“取钱”函数 的调用者,“取钱”函数为我们提供服务。
代码展示如下:
package p4; public class hanshu{ public static void main(String [] args){ int d=add(3,2); //调用函数 System.out.println(d); } public static int add(int a,int b){//声明public static 返回值类型 函数名(形参) int c=a+b; //实现 return c; //返回值 } }
Ⅰ,定义位置
在类中,任何函数的外部;一个类中可以有多个函数,函数的顺序是无关紧要的。
Ⅱ,声明
public static 返回值类型 函数名(参数表)
形式参数(形参):相当于函数内部有效的局部变量
最重要的部分就是函数的三要素:返回值、函数名、参数表。 返回值
函数名:表示函数的名字;
参数表:表示调用函数时所给的参数是什么,即调用函数时需要给函数哪些 “输入”。
返回值: 以“取钱”函数为例,函数的返回值为“钱”,我们作为调用者调用“取钱”函数,目 的就是获得这个函数的返回值“钱”;这个函数的参数表表示我们对调用“取钱”时应该给 这个函数传递的参数,取钱时需要“银行卡、密码、取款金额”等一系列参数。 在 Java 中,函数(Function)也被称之为方法(Method)。Java 中并不区分这两个概 念,因此,本书中“函数”和“方法”指的是同一个意思。
return 语句除了能够返回值之外,还能够控制 流程的跳转。具体的说,在执行 return 语句的时候,被调用的函数会终止执行,并返回到 函数的调用点上
返回值为void类型,不需要返回值,将代码块中代码执行完再结束。
Ⅲ,实现
{ }
必须和声明一致(主要指返回值类型)
Ⅳ,调用函数
函数名(实际参数(实参));
实参会依次给形参赋值
调用函数,程序流程会进入函数,函数返回,程序流程会返回到函数调用点
①函数的嵌套调用
前面的内容,我们为大家介绍了函数的一些基本使用。接下来,要介绍的是函数中一 些更加灵活的应用。看下面这个代码的例子:
package p4; public class TestNestedCall{ /* 首先,是在main函数中输出“main1”,然后,在main函数中调用了ma方法, 于是,流程从 main 中跳转到了ma函数中。 在ma函数的第一个语句中,输出“ma1”。 */ public static void main(String args[]){ System.out.println("main1"); ma(); System.out.println("main2"); } /* 然后,在ma方法中,又调用了mb方法。 */ public static void ma(){ System.out.println("ma1"); mb(); System.out.println("ma2"); } public static void mb(){ System.out.println("mb1"); System.out.println("mb2"); } /* 在ma调用mb函数之后,mb函数输出“mb1”和“mb2”。 然后,mb 函数中所有的代码都执行完了,mb函数返回其调用点, 也就是返回到ma方法中。然后,ma方法继续执行,输出“ma2”。 然后,ma方法的代码也都全部完成,于是 ma 方法也返回调用点, 也就是返回到主函数中。最后,主函数输出“main2”,主函数中所 有代码都执行完毕,程序终止。 */ }
②函数的递归调用
函数除了能够调用其他函数之外,还可以调用函数本身。这就是函数的递归调用。
如果需要写递归的话,需要注意一下几个问题:
1、要首先研究出一个推导公式,这个公式要与参数有关,最好这个公式能够用(n-1)调 用的结果,来计算调用 n 的结果。例如,上面的 n! = (n-1)! * n 就是一个很好的例子。
2、 要写出递归的收敛条件。例如,上面对 n 是否为 1 的判断,这部分就是在说明递归 什么时候终止。
二、函数的作用
package p4; public class TestSeperator{ public static void main(String args[]){ System.out.println("Hello World"); //打印分隔符 -------------------- for(int i = 0 ; i < 20 ; i++){ System.out.print(“-“); } System.out.println(); System.out.println("你好,世界"); //打印分隔符 -------------------- for(int i = 0 ; i < 20 ; i++){ System.out.print(“-“); } System.out.println(); System.out.println("Bonjour tout le monde"); //打印分隔符 -------------------- for(int i = 0 ; i < 20 ; i++){ System.out.print(“-“); } System.out.println(); System.out.println("Hallo Welt"); } }
1,避免冗余代码
我们来分析一下上面的代码。由于要输出三个分隔符,因此,需要有三个一模一样的
打印语句。因此,我们可以写一个函数:printSeperator(),这个函数专门用来打印分隔符。 修改后的代码如下:
package p4; public class TestSeperator{ public static void main(String args[]){ System.out.println("Hello World"); printSeperator(); System.out.println("你好,世界"); printSeperator(); System.out.println("Bonjour tout le monde"); printSeperator(); System.out.println("Hallo Welt"); } public static void printSeperator(){ for(int i = 0 ; i < 20 ; i++){ System.out.print(“-“); } System.out.println(); } }
2,提高程序的可维护性
如果现在需求产生了变化,
在输出分隔符时,希望能够输出一行“+”而不是一行“-”,此时,就必须要修改代码。 如果不使用函数的话,则必须要改动主函数中所有的输出分隔符的语句。在这个具体 的例子中,在主函数中的代码要修改三处。修改后的代码片段如下:
System.out.println("Hello World"); //打印分隔符 +++++++++++++++++++ for(int i = 0 ; i < 20 ; i++){ System.out.print(“+“); } System.out.println(); System.out.println("你好,世界"); //打印分隔符 +++++++++++++++++++ for(int i = 0 ; i < 20 ; i++){ System.out.print(“+“); } System.out.println(); System.out.println("Bonjour tout le monde"); //打印分隔符 +++++++++++++++++++ for(int i = 0 ; i < 20 ; i++){ System.out.print(“+“); } System.out.println(); System.out.println("Hallo Welt");
3,提高程序的重用性
如果使用函数的话,由于在主函数中仅仅是对同一个函数的多次调用,
因此,让函数实现发生改变的时候,函数的调用不需要改变。我们只需要对函数的实现修
改一次,就完成了我们的工作。修改后的代码如下:
public static void main(String args[]){ System.out.println("Hello World"); printSeperator(); System.out.println("你好,世界"); printSeperator(); System.out.println("Bonjour tout le monde"); printSeperator(); System.out.println("Hallo Welt"); } public static void printSeperator(){ for(int i = 0 ; i < 20 ; i++){ System.out.print(“+“); } System.out.println(); }
4,提高程序的灵活性
使用函数,利用函数参数的变化,能够让代码更加灵活。例如,假设现在对分
隔符的长度有不同的要求,要求第一个分隔符长度为 20,第二个分隔符长度为 25,第三个 分割符长度为 30。 这样的需求,如果不适用函数的话,则必须要修改这三个输出的地方,并且每个地方 的输出语句都比较复杂。而如果使用函数的话,则可以让函数增加一个参数,这个参数表 示分隔符的长度。修改后的 printSeperator 函数如下:
public static void printSeperator(int n){ for (int i = 0; i < n; i++){ System.out.print(“+”); } System.out.println(); }
这样,在主函数中,只要对这个函数传入不同的参数进行三次调用即可。修改后完整
的主函数如下
public static void main(String args[]){ System.out.println("Hello World"); printSeperator(20); System.out.println("你好,世界"); printSeperator(25); System.out.println("Bonjour tout le monde"); printSeperator(30); System.out.println("Hallo Welt"); }