一、方法的重载
Java允许在同一个类中定义几个同名的方法,只要这些方法具有不同的参数列表,即方法的参数类型不同,或方法参数个数不同。这种做法称为方法的重载。方法的重载包括以下几种:
1、成员方法的重载
重载方法的参数表必须不同,参数的不同主要是参数的类型、顺序、个数不同。
public class MethodOverload { public int sum(int a, int b) { System.out.println("sum(int a, int b)"); return a + b; } public double sum(double a, double b) { System.out.println("sum(double a, double b)"); return a + b; } public static void main(String[] args) { MethodOverload overload = new MethodOverload(); overload.sum(10, 10); overload.sum(10.0, 10.0); } }
在上面的例子中定义了同名的方法sum,但参数列表不同,为了区分实际调用的方法,在sum方法中输出了方法的原型,运行后可得到如下结果:
sum(int a, int b)
sum(double a, double b)
由此我们可以看不到,虽然方法的方法名相同,但是Java会根据实际情况调用最适合的方法。
2、构造方法的重载
在上一篇博客中也提到了一些构造方法重载的知识,定义多个构造方法其实就是构造方法的重载。当一个类中存在多个重载的构造方法时,他们之间可以相互调用,这种调用通过关键字this实现,同时this调用语句必须是构造方法中的第一个可执行于语句。
3、注意
a、参数顺序
因参数的顺序不同而构建的重载的方法,一定要建立在类型不同的基础上,如果本身类型和个数相同,则不存不在顺序问题。
b、返回值
重载方法的返回类型可以相同,也可以不同,但如果仅是返回类型不同,而方法名和形参列表都相同,则是非法的。
二、方法间的参数传递
方法声明时的参数称为形式参数(形参)。直到方法被调用时,才被变量或其他数据所替代,而这些具体的变量或数据被称为实际参数。要调用一个方法必须提供实际参数,并且参数类型与顺序必须要与形式参数相对应。
1、基本数据类型的参数传递
public class Value { public void change(int a) { a += 1; } public static void main(String[] args) { Value value = new Value(); int a = 10; value.change(a); System.out.println(a); } }
运行后输出结果为:10
此种传递方式形式参数就相当于方法中定义的局部变量,方法调用结束后就被释放了,不会影响到主程序中同名的局部变量,即在方法中对形参进行修改后不会影响到实际传递的实参。
2、引用数据类型的参数传递
public class Ref { private int a; public void change(Ref ref) { ref.a += 1; } public static void main(String[] args) { Ref ref = new Ref(); ref.a = 10; ref.change(ref); System.out.println(ref.a); } }
运行后输出结果为:11
对象的引用变量并不是对象本身,它们只是对象的引用(名称)。就好像一个人可以有多个名字,同理,一个对象也可以有多个引用名称。因为实际的对象是同一个,所以在方法中对其进行修改后,会影响其它地方的引用。一定要注意区分这两种传递的区别。