Java编程那些事儿55—方法重载和参数传递
郑州游戏学院 陈跃峰
出自:http://blog.csdn.net/mailbomb
7.5 方法相同
在Java语言中,方法相同的概念和其它程序设计语言不尽相同,Java语言中的方法相同指方法名称和参数列表都相同,其中参数列表相同指参数个数、参数类型和参数排列顺序等相同,参数名称可以不相同。相同的方法访问控制符、返回值类型可以不相同。
以下是一下相同的方法:
public void test(int a,double[] d)
private int test(int i,double[] d1)
在同一个类内部,不能声明相同的方法,否则将出现语法错误。
7.6 方法重载
方法重载(overload)是一种语法现象,指在一个类内部出现了多个方法名相同,但是参数列表不同的方法。
方法重载的作用是将功能相同,但是参数列表不同的方法采用相同的方法名称,便于程序员使用。根据方法相同的概念,重载的方法都是不相同的方法。
在Java提供的API中,大量应用重载的概念,方便程序员对于系统功能方法的实际使用。
恰当的使用重载,可以增强代码的可维护性。
以下是方法重载的示例:
public void a(int a){}
public int a(){}
public void a(int a,String s){}
在以上示例方法中,方法的名称都是a,而参数列表却各不相同,这些方法实现了重载的概念。但是仔细观察可以发现,这些重载的方法的返回值不尽相同,因为返回值类型和方法的重载无关。
通常情况下,重载的方法在访问控制符、修饰符和返回值类型上都保持相同,这个不是语法的要求,只是将这些制作成一致以后,便于实际使用。
7.7 参数传递
在方法调用时,需要根据方法声明传入适当的参数,通过每次调用方法时传参,极大的增强了方法的统一性,避免了方法内部功能代码的重复。但是在实际传递参数时,如果在方法内部修改了参数的值,则调用时使用的变量是否发生改变呢?
例如如下代码:
/**<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
* 参数传递代码示例
*/
public class TransferValueDemo {
public static void main(String[] args) {
int m = 10;
int[] a = {1,2,34};
test(m,a);
System.out.println(m);
System.out.println(a[0]);
}
public static void test(int n,int[] t){
n = 0;
t[0] = 123;
}
}
则执行该程序以后,程序的输出结果是:10 123。则在调用test方法时,同样都是传入参数,为什么变量m的值未改变,而a[0]的值发生了改变呢?下面就来说明该问题。
在参数传递时,一般存在两种参数传递的规则,在Java语言中也是这样,这两种方式依次是:
l 按值传递(by value)
按值传递指每次传递参数时,把参数的原始数值拷贝一份新的,把新拷贝出来的数值传递到方法内部,在方法内部修改时,则修改的时拷贝出来的值,而原始的值不发生改变。
说明:使用该方式传递的参数,参数原始的值不发生改变。
l 按址传递(by address)
按址传递指每次传递参数时,把参数在内存中的存储地址传递到方法内部,在方法内部通过存储地址改变对应存储区域的内容。由于在内存中固定地址的值只有一个,所以当方法内部修改了参数的值以后,参数原始的值发生改变。
说明:使用该方式传递的参数,在方法内部修改参数的值时,参数原始的值也发生改变。
在Java语言中,对于那些数据类型是按值传递,那些数据类型是按址传递都作出了硬性规定,如下所示:
l 按值传递的数据类型:八种基本数据类型和String
l 按址传递的数据类型:除String以外的所有复合数据类型,包括数组、类和接口
按照这里的语法规则,则上面的代码中变量m的类型是int,属于按值传递,所以在方法内部修改参数的值时m的值不发生改变,而a的类型是数组,属于按址传递,所以在方法内部修改参数的值时,原始的值发生了改变。
按值传递和按址传递在实际使用时,需要小心,特别是在方法内部需要修改参数的值时。有些时候,对于按值传递的参数需要修改参数的值,或者按址传递时,不想修改参数的值,下面是实现这两种方式时的示例代码。
按值传递时通过返回值修改参数的值:
/**
* 按值传递的类型通过返回值修改参数的值
*/
public class TransferValueDemo1 {
public static void main(String[] args) {
int m = 10;
m = test1(m); //手动赋值
System.out.println(m);
}
public static int test1(int n){
n = 15;
return n;
}
}
在该示例代码中,通过把修改以后的参数n的值返回,来为变量m赋值,强制修改按值传递参数的值,从而达到修正参数值的目的。
按址传递时通过重新生成变量避免修改参数的值:
/**
* 按址传递时通过重新生成变量避免修改参数的值
*/
public class TransferValueDemo2 {
public static void main(String[] args) {
int[] a = {1,2,3};
test2(a);
System.out.println(a[0]);
}
public static void test2(int[] m){
int[] n = new int[m.length];
for(int i = 0;i < m.length;i++){
n[i] = m[i];
}
n[0] = 10;
}
}
在该示例代码中,通过在方法内部创新创建一个数组,并且把传入数组中每个参数的值都赋值给新创建的数组,从而实现复制数组内容,然后再修改复制后数组中的值时,原来的参数内容就不发生改变了。
这里系统介绍了Java语言中参数传递的规则,深刻理解这些规则将可以更加灵活的进行程序设计。例如使用复合数据类型按址传递的特性可以很方便的实现多参数的返回,代码示例如下:
public int test3(int[] m,int[] n){……}
则该方法中,实际上返回了三种值,一个int的返回值,数组m的值,数组n的值,这只是参数传递的一种基本使用,在JDK提供的API文档中也大量的存在该方法。
7.8 小结
本部分系统的介绍了方法的概念,方法的语法,方法的调用以及和方法有关的一些其它语法知识,深刻理解这些语法是进行程序设计的基础。
分享到:
相关推荐
《Java编程那些事儿》是陈跃峰先生的一本关于Java编程技术的著作,虽然在网络上可能难以找到完整的电子版,但通过你提供的文件名列表,我们可以梳理出一系列关键知识点,这些都是学习Java编程过程中不可或缺的部分。...
方法的定义和方法的重载是 Java 编程语言的基础知识,本文将对 Java 方法的定义和方法的重载进行详细的介绍。 一、Java 方法的定义 Java 方法是解决问题的多行代码的集合,给予一个名字,以便多次使用。方法的作用...
JAVA 中的方法重写和方法重载是两个重要的概念,在面向对象程序设计语言中尤为重要。方法重写和方法重载都是多态性的体现,但它们之间有着本质的区别。 方法重写(Override)是指在子类中定义的一个方法,其名称、...
Java中的方法重载是面向对象编程的一个重要特性,它允许在一个类中定义多个同名方法,但这些方法的参数列表必须有所不同。这主要是通过改变参数的数量或参数的类型来实现的。下面我们将深入探讨这个主题。 1. **...
通过三个实验,学生掌握了方法的声明和调用、值传递和方法的重载,并熟悉了 Math 类的使用。 一、方法的声明和调用 在 Java 中,方法是指一个可以执行特定任务的代码块。方法的声明包括方法的名称、返回类型、参数...
在Java编程语言中,方法重载(Overloading)是一种重要的多态性实现方式,它允许我们在同一个类中定义多个同名但参数列表不同的方法。理解方法重载的内存分配过程对于初学者来说至关重要,因为这有助于深入理解Java...
### Java编程中对象的创建与使用以及方法的重构与重载的区别说明 #### 对象的创建与使用 在Java编程语言中,一切皆基于对象。理解如何创建对象以及如何使用对象是学习Java的基础。 ##### 1. 对象的创建过程 创建...
在实际编程中,构造方法和方法重载的应用非常广泛。构造方法使得对象的初始化更加规范,而方法重载则提供了代码的多样性,使代码更易于理解和维护。通过合理地运用这两个特性,开发者可以创建出既强大又灵活的Java...
Java方法重载是面向对象编程中的一个重要概念,它允许在一个类中定义多个具有相同名称但参数列表不同的方法。这样做的好处在于,通过方法名就可以直观地理解方法的功能,而具体的执行逻辑则由传入的参数类型和数量...
在Java编程语言中,方法重载(Method Overloading)是一种重要的多态性表现形式,它允许在一个类中定义多个同名方法,但每个方法的参数列表必须不同。这包括参数的数量、类型或顺序的差异。正确地实现方法重载对于...
这篇课堂笔记07主要涵盖了五个关键的Java编程概念:包(Package)、构造方法、方法重载、封装以及方法参数的传递。让我们逐一深入理解这些知识点。 首先,包是Java中用于组织类和接口的一种机制,它类似于文件系统...
11. **Java标准库**:Java的类库包含大量预定义的类和方法,如数学运算、日期时间、网络通信等,熟悉并熟练使用这些工具能提升编程效率。 12. **Java开发工具**:Eclipse、IntelliJ IDEA等集成开发环境(IDE)提供...
Java方法重载+Java重载案例+Java重载 Java方法重载+Java重载案例+Java重载 Java方法重载+Java重载案例+Java重载 Java方法重载+Java重载案例+Java重载
2. Java 多态:Java 中的多态是指一个对象可以拥有多种形式,例如方法重载和方法重写。 Java 应用实例 1. Java 圆类 Circle:Circle 类拥有成员变量 Radius、构造方法和成员方法 getArea、getPerimeter 和 show。 ...
### Java方法继承、方法重载、方法覆盖总结 ...综上所述,方法继承、方法重载和方法覆盖是Java面向对象编程中的三个重要概念。正确理解和运用这些概念能够帮助开发者编写出更加灵活、高效和可维护的代码。
63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java方法重载.zip63.java...
在编程语言中,方法重载(Overloading)和方法重写(Overriding)是两个非常重要的概念,它们都是实现多态性(Polymorphism)的关键机制。本文将深入探讨这两个概念,以及它们在实际编程中的应用。 ### 方法重载...
在Java编程语言中,方法重载(Overloading)是一个非常重要的概念,它允许我们在一个类中定义多个同名的方法,但这些方法必须具有不同的参数列表。这种灵活性使得程序设计更加直观且易于理解。下面将详细介绍Java...
方法继承是 Java 编程语言的一种机制,允许一个类继承另一个类的属性和方法。使用 `extends` 关键字,可以继承一个类的所有公有、保护和默认级别的变量和方法。如果子类和基类在同一个包中,子类可以继承基类中的...