方法的重载 我们假设要在程序中实现一个对数字求和的方法,由于参与求和数字的个数和类型都不确定,因此要针对不同的情况去设计不同的方法。接下来通过一个案例来实现对两个整数相加、对三个整数相加以及对两个小数相加的功能,具体实现如下所示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 public class MethodDemo02 { public static void main (String[] args) { int sum1 = add01(1 , 2 ); int sum2 = add02(1 , 2 , 3 ); double sum3 = add03(1.2 , 2.3 ); System.out.println("sum1=" + sum1); System.out.println("sum2=" + sum2); System.out.println("sum3=" + sum3); } public static int add01 (int x, int y) { return x + y; } public static int add02 (int x, int y, int z) { return x + y + z; } public static double add03 (double x, double y) { return x + y; } }
运行结果如下图所示。
从上述代码不难看出,程序需要针对每一种求和的情况都定义一个方法,如果每个方法的名称都不相同,在调用时就很难分清哪种情况该调用哪个方法。为了解决这个问题,Java允许在一个类中定义多个名称相同的方法,但是参数的类型或个数必须不同,这就是方法的重载。
下面的三个方法互为重载关系
public static int add(int x,int y) {逻辑} //两个整数加法
public static int add(int x,int y,int z) {逻辑} //三个整数加法
public static int add(double x,double y) {逻辑} //两个小数加法
接下来通过方法重载的方式进行修改,如下所示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 public class MethodDemo03 { 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; } }
运行结果和MethodDemo03.java一样,如下图所示。
上述代码中定义了三个同名的add()方法,它们的参数个数或类型不同,从而形成了方法的重载。 在main()方法中调用add()方法时,通过传入不同的参数便可以确定调用哪个重载的方法,如add(1,2)调用的是两个整数求和的方法。值得注意的是,方法的重载与返回值类型无关,它只有两个条件,一是方法名相同,二是参数个数或参数类型不相同。
a)重载的注意事项 重载方法参数必须不同:
参数个数不同,如method(int x)与method(int x,int y)
不同 参数类型不同,如method(int x)与method(double x)
不同 参数顺序不同,如method(int x,double y)与method(double x,int y)
不同
重载只与方法名与参数类型相关与返回值无关
如void method(int x)
与int method(int y)
不是方法重载,不能同时存在
重载与具体的变量标识符无关
如method(int x)
与method(int y)
不是方法重载,不能同时存在
b)参数传递 参数传递,可以理解当我们要调用一个方法时,我们会把指定的数值,传递给方法中的参数,这样方法中的参数就拥有了这个指定的值,可以使用该值,在方法中运算了。这种传递方式,我们称为参数传递。
在这里,定义方法时,参数列表中的变量,我们称为形式参数
调用方法时,传入给方法的数值,我们称为实际参数
我们看下面的两段代码,来明确下参数传递的过程:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class ArgumentsDemo01 { public static void main (String[] args) { int a=5 ; int b=10 ; change(a, b); System.out.println("a=" + a); System.out.println("b=" + b); } public static void change (int a, int b) { a=200 ; b=500 ; } }
程序的运行结果如下:
再看另一段代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 public class ArgumentsDemo02 { public static void main (String[] args) { int [] arr = { 1 , 2 , 3 }; change(arr); for (int i = 0 ; i < arr.length; i++) { System.out.println(arr[i]); } } public static void change (int [] arr) { for (int i = 0 ; i < arr.length; i++) { arr[i] *= 2 ; } } }
程序的运行结果如下: