第五讲 Java语法基础——函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yerenyuan_pku/article/details/81637684

函数的概述

函数就是定义在类中的具有特定功能的一段独立小程序。函数也称为方法。

函数的定义格式

函数的格式:

修饰符 返回值类型 函数名(参数类型 形式参数1, 参数类型 形式参数2, ... )
{
    执行语句;
    return 返回值;
}

对于该格式的解释如下:

  • 返回值类型:函数运行后的结果的数据类型。
  • 参数类型:是形式参数的数据类型。
  • 形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。
  • 实际参数:传递给形式参数的具体数值。
  • return:用于结束函数。
  • 返回值:该值会返回给调用者。

试看以下代码:

int x = 4;
System.out.println(x*3+5);

x = 6;
System.out.println(x*3+5);

发现以上的运算,因为获取不同数据的运算结果,代码出现了重复。为了提高代码的复用性,对代码进行了抽取,将这个部分定义成一个独立的功能,方便于日后使用,java中对该功能的定义是通过函数的形式来体现的。 所以,我们有了一个需求:定义一个功能,完成一个整数x3+5的运算,并打印结果,功能如下:

public static int getResult(int num) {
    return num * 3 + 5;
}   

当函数运算后没有具体的返回值,这时返回值类型用一个特殊的关键字来标识,该关键字就是void,void代表的是函数没有具体返回值的情况。当函数的返回值类型是void时,函数中的return语句可以省略不写。即:

public static void getResult(int num) {
    System.out.println(num * 3 + 5);
    return; // 可以省略
} 

函数的特点及注意事项

函数的特点:

  • 定义函数可以将功能代码进行封装,便于对该功能进行复用。
  • 函数只有被调用才会被执行。
  • 函数的出现提高了代码的复用性。
  • 对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。

两点注意事项:

  1. 函数中只能调用函数,不可以在函数内部定义函数。
  2. 定义函数时,函数的结果应该返回给调用者,交由调用者处理。

函数的应用

如何定义一个函数呢?我们只要明确以下两点就可以了。

  1. 既然函数是一个独立的功能,那么该功能的运算结果是什么呢?所以得先明确,因为这是在明确函数的返回值类型。
  2. 再明确在定义该功能的过程中,是否需要未知的内容参与运算。因为这是在明确函数的参数列表(参数的类型和参数的个数)。

下面我就用四个例子来举例说明函数的具体应用。
例一,需求:定义一个功能:完成3+4的运算,并将结果返回给调用者。
分析:

  1. 明确功能的结果:是一个整数的和。
  2. 在实现该功能的过程中,是否有未知内容参与运算:没有。

其实这两个分析点就是在明确函数的定义:

扫描二维码关注公众号,回复: 2907331 查看本文章
  1. 明确函数的返回值类型。
  2. 明确函数的参数列表(参数的类型和参数的个数)。

    public static int getSum() {
        return 3 + 4;
    }

    以上这个函数的功能,结果是固定的,毫无扩展性而言,为了方便用户需求,由用户来指定加数和被加数,这样,功能才有意义。

例二,定义一个功能,可以实现两个整数的加法运算。
分析:

  1. 功能结果是一个和,返回值类型是int。
  2. 是否有未知内容参与运算,有2个,这2个未知内容的类型都是int。

    public static int getSum(int x, int y) {
        return x + y;
    }

例三,需求:判断两个数是否相同?
分析:

  1. 明确功能结果:结果是boolean类型。
  2. 功能是否有未知内容参与运算:有,两个整数。

    public static boolean compare(int a, int b) {
        if(a == b) 
            return true;
        else 
            return false;
    }

    注意上面方法代码的并不是最优代码,第一次优化后:

    public static boolean compare(int a, int b) {
        if(a == b) 
            return true;
        return false;
    }

    第二次优化后:

    public static boolean compare(int a, int b) {
        return a == b ? true : false;
    }

    最后一次优化(实际开发中使用):

    public static boolean compare(int a, int b) {
        return a == b;
    }

例四,需求:定义功能,对两个数进行比较,获取较大的数。
由于非常简单,这里就不分析了,直接给出该功能的代码。

public static int getMax(int a, int b) {
    return (a > b) ? a : b;
}

最后再用两个练习对函数的具体应用进行进一步的巩固。
练习一,定义一个功能,用于打印矩形。
分析:

  1. 确定结果:没有,因为直接打印,所以返回值类型是void。
  2. 有未知内容吗?有,2个,因为矩形的行和列不确定。

    public static void draw(int row, int col) {
        for (int x = 0; x < row; x++) {
            for (int y = 0; y < col; y++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }

练习二,定义一个打印99乘法表功能的函数。

public static void print99() {
    for (int x = 1; x <= 9; x++) {
        for (int y = 1; y <= x; y++) {
            System.out.print(y+"*"+x+"="+y*x+"\t");
        }
        System.out.println();
    }
}

函数的重载(overload)

重载的概念

在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。

重载的特点

与返回值类型无关,只看参数列表,在调用时,虚拟机通过参数列表的不同来区分同名方法。
现在我就用两个例子来说明函数是如何重载的。

例一,

  • 先定义一个加法运算,获取两个整数的和。

    public static int add(int x, int y) {
        return x + y;
    }
  • 再定义一个加法运算,获取三个整数的和。

    public static int add(int x, int y, int z) {
        return x + y + z;
    }

    这两段代码就是函数的重载,当然函数中可调用函数,所以以上代码也可以写成:

    public static int add(int x, int y, int z) {
        return add(x, y) + z;
    }

例二,定义一个打印99乘法表功能的函数,很简单,我们已经做了,代码如下:

public static void print99() {
    for (int x = 1; x <= 9; x++) {
        for (int y = 1; y <= x; y++) {
            System.out.print(y+"*"+x+"="+y*x+"\t");
        }
        System.out.println();
    }
}

此时,如果我们还要打印一个任意数乘法表功能的函数,我们可以这样做:

public static void print99(int num) {
    for (int x = 1; x <= num; x++) {
        for (int y = 1; y <= x; y++) {
            System.out.print(y+"*"+x+"="+y*x+"\t");
        }
        System.out.println();
    }
}

同理,打印99乘法表功能的函数,我们还可以写成:

public static void print99() {
    print99(9);
}

什么时候用重载?

当定义的功能相同,但参与运算的未知内容不同,那么,这时就定义一个函数名称以表示其功能,方便阅读,而通过参数列表的不同来区分多个同名函数。

重载的注意事项

注意事项:

  1. 参数列表是有顺序的。
  2. 重载和返回值类型没关系。

练习:以下哪些函数与函数void show(int a, char b, double c) {}重载?

a.
void show(int x, char y, double z) {} 

b.
int show(int a, double c, char b) {}

c.
void show(int a, double c, char b) {}

d.
boolean show(int c, char b) {}

e.
void show(double c) {} 

f.
double show(int x, char y, double z) {} 

答案:

a.
void show(int x, char y, double z) {} // 没有,因为和原函数一样

b.
int show(int a, double c, char b) {} // 重载,因为参数类型不同。注意:重载和返回值类型没有关系

c.
void show(int a, double c, char b) {} // 重载,因为参数类型不同。注意:重载和返回值类型没有关系

d.
boolean show(int c, char b) {} // 重载,因为参数个数不同

e.
void show(double c) {} // 重载,因为参数个数不同

f.
double show(int x, char y, double z) {} // 没有,这个函数不可以和给定函数同时存在于一个函数当中。

猜你喜欢

转载自blog.csdn.net/yerenyuan_pku/article/details/81637684
今日推荐