📋 个人简介
💖 作者简介:大家好,我是W_chuanqi,一个编程爱好者
📙 个人主页:W_chaunqi
😀 支持我:点赞👍+收藏⭐️+留言📝
💬 愿你我共勉:“没有什么比勇气更温文尔雅,没有什么比怯懦更冷酷无情!”✨✨✨
方法
1 什么是方法
方法就是一段可以重复调用的代码。假设有一个游戏程序,程序在运行过程中,要不断地发射炮弹。发射炮弹的动作需要编写100行代码,在每次实现发射炮弹的地方都需要重复地编写这100行代码,这样程序会变得很臃肿,可读性也非常差。为了解决上述问题,通常会将发射炮弹的代码提取出来,放在一个{}中,并为这段代码起个名字,提取出来的代码可以被看作是程序中定义的一个方法。这样在每次发射炮弹的地方,只需通过代码的名称调用方法,就能完成发射炮弹的动作。需要注意的是,有些书中也会把方法称为函数。
在Java中,定义一个方法的语法格式如下:
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,...){
执行语句
...
return 返回值;
}
对于方法的语法格式,具体说明如下:
- 修饰符:方法的修饰符比较多,例如,对访问权限进行限定的修饰符,static修饰符,final修饰符等,这些修饰符在后面的学习过程中会逐步介绍。
- 返回值类型:用于限定方法返回值的数据类型。
- 参数类型:用于限定调用方法时传入参数的数据类型。
- 参数名:是一个变量,用于接收调用方法时传入的数据。
- return关键字:用于返回方法指定类型的值并结束方法。
- 返回值:被return语句返回的值,该值会返回给调用者。
注意:
方法中的“参数类型 参数名1,参数类型 参数名2”被称作参数列表,参数列表用于描述方法在被调用时需要接收的参数,如果方法不需要接收任何参数,则参数列表为空,即()内不写任何内容。方法的返回值类型必须是方法声明的返回值类型,如果方法没有返回值,返回值类型要声明为void,此时,方法中return语句可以省略。
接下来通过一个案例演示方法的定义与调用,在该案例中,定义一个方法,使用“*”符号打印矩形。
public class Example19 {
public static void main(String[] args) {
printRectangle(3, 5); // 调用 printRectangle()方法实现打印矩形
printRectangle(2, 4);
printRectangle(6, 10);
}
// 下面定义了一个打印矩形的方法,接收两个参数,其中height为高,width为宽
public static void printRectangle(int height, int width) {
// 下面是使用嵌套for循环实现*打印矩形
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
System.out.print("*");
}
System.out.print("\n");
}
System.out.print("\n");
}
}
程序运行结果如下图。
上述代码中,第8~17行代码定义了一个方法printRectangle(),{}内实现打印矩形的代码是方法体,printRectangle是方法名,方法名后面()中的height和width是方法的参数,方法名前面的void表示方法没有返回值。第3~5行代码调用printRectangle()方法传入不同的参数,分别打印出3行5列、2行4列和6行10列的矩形。由运行结果可知,程序成功打印出了三个矩形。
接下来通过一个案例演示有返回值方法的定义与调用。
public class Example20 {
public static void main(String[] args) {
int area = getArea(3, 5); // 调用 getArea方法
System.out.println(" The area is " + area);
}
// 下面定义了一个求矩形面积的方法,接收两个参数,其中x为高,y为宽
public static int getArea(int x, int y) {
int temp = x * y; // 使用变量temp记住运算结果
return temp; // 将变量temp的值返回
}
}
程序运行结果如下图。
上述代码中,第7~10行代码定义了一个getArea()方法用于求矩形的面积,参数x和y分别用于接收调用方法时传入的长和宽,return语句用于返回计算所得的面积。在main()方法中调用getArea()方法,获得长为3宽为5的矩形的面积,并将结果打印出来。由运行结果可知,程序成功打印出了矩形面积15。
通过一个图展示getArea()方法的整调用过程如下图。
当调用getArea()方法时,程序执行流程从当前函数调用处跳转到getArea()内,程序为参数变量x和y分配内存,并将传入的参数3和5分别赋值给变量x和y。在getArea()函数内部,计算x*y的值,并将计算结果通过return语句返回,整个方法的调用过程结束,变量x和y被释放。程序执行流程从getArea()函数内部跳转回主程序的函数调用处。
2 方法的重载
在平时生活中经常会出现这样一种情况,一个班里可能同时有两个叫小明的同学,甚至有多个,但是他们的身高、体重、外貌等有所不同,老师点名时都会根据他们的特征来区分。在编程语言里也存在这种情况,参数不同的方法有着相同的名字,调用时根据参数不同确定调用哪个方法,这就是Java方法重载机制。
所谓方法重载,就是在同一个作用域内方法名相同但参数个数或者参数类型不同的方法。例如,在同一个作用域内同时定义三个add()方法,这三个add()方法就是重载函数。
下面一个案例演示重载方法的定义与调用,在该案例中,定义三个add()方法,分别用于实现两个整数相加、三个整数相加以及两个小数相加的功能。
public class Example21 {
public static void main(String[] args) {
// 下面是针对求和方法的调用
int sum1 = add(1, 2);
int sum2 = add(1, 2, 3);
double sum3 = add(1.2, 2.3);
// 下面的代码是打印求和的结果
System.out.println("sum1=" + sum1);
System.out.println("sum2=" + sum2);
System.out.println("sum3=" + sum3);
}
// 下面的方法实现了两个整数相加
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 double add(double x, double y) {
return x + y;
}
}
程序运行结果如下图。
上述代码中,定义了三个同名的add()方法,但它们的参数个数或类型不同,从而形成了方法的重载。在main()方法中调用add()方法时,通过传入不同的参数便可以确定调用哪个重载的方法,如add(1,2)调用的是第13~14行代码定义的add()方法。需要注意的是,方法的重载与返回值类型无关。