说完了类和对象,我们再对类的成员中的方法做一个详细的讲解
方法的定义本身比较简单,我在这里就不说了,关于上面提到的类和对象,大家可以参考我上一篇文章:面向对象有那么难吗?一个月搞定面向对象——第一周(1)
一、方法的重载:
什么是重载
我们在编程时,可能有些时候需要用同一个方法名,但是在不同的地方用的时候传递的参数类型以及数量可能不同,里面的内容可能不同,但是方法名是相同的。
那么我们就引入的重载的定义:在同一个类中,允许存在一个以上的同名方法,只要他们的参数类型或数量不同即可。
重载的特点
方法的重载与返回值类型无关,但参数列表必须不同(参数类型以及数量)。调用时,根据调用的方法参数列表的不同来区别。
我们来举个栗子~
public class OverloadExer { //1. 如下的三个方法构成重载 public void mOL(int i){ System.out.println(i * i); } public void mOL(int i,int j){ System.out.println(i * j); } public void mOL(String s){ System.out.println(s); } //2.如下的三个方法构成重载 public int max(int i,int j){ return (i > j)? i : j; } public double max(double d1,double d2){ return (d1 > d2)? d1 : d2; } public double max(double d1,double d2,double d3){ double max = (d1 > d2)? d1 : d2; return (max > d3)? max : d3; }
**
二、可变个数形参
**
JavaSE 5.0 中提供了Varargs(variable number of arguments)机制,允许直接定
义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可 变的实参。
//JDK 5.0以前:采用数组形参来定义方法,传入多个同一类型变量 public static void test(int a ,String[] books); //JDK5.0:采用可变个数形参来定义方法,传入多个同一类型变量 public static void test(int a ,String…books);
可变个数形参的声明方法:方法名(参数的类型名…参数名)
可变个数形参能识别的参数可以是0个,1个或多个,也就是说,没有参数也可以调用这个方法。
说了这个概念,那究竟要怎么用呢?
我们在代码中分析:
public class MethodArgsTest { public static void main(String[] args) { MethodArgsTest test = new MethodArgsTest(); test.show(12); // test.show("hello"); // test.show("hello","world"); // test.show(); test.show(new String[]{"AA","BB","CC"}); } public void show(int i){ } public void show(String s){ System.out.println("show(String)"); } public void show(String ... strs){ System.out.println("show(String ... strs)"); for(int i = 0;i < strs.length;i++){ System.out.println(strs[i]); } } }
三、方法参数的值传递机制
若形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参
若形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参
下面我们分别用两端代码来解释设两个机制:
//这里我们用交换两个数的程序来说明这一点 //首先是基本数据类型 public class ValueTransferTest1 { public static void main(String[] args) { int m = 10; int n = 20; System.out.println("m = " + m + ", n = " + n); //交换两个变量的值的操作 // int temp = m ; // m = n; // n = temp; ValueTransferTest1 test = new ValueTransferTest1(); test.swap(m, n); System.out.println("m = " + m + ", n = " + n); } public void swap(int m,int n){ int temp = m ; m = n; n = temp; } }
下面是引用数据类型
public class ValueTransferTest2 { public static void main(String[] args) { Data data = new Data(); data.m = 10; data.n = 20; System.out.println("m = " + data.m + ", n = " + data.n); //交换m和n的值 // int temp = data.m; // data.m = data.n; // data.n = temp; ValueTransferTest2 test = new ValueTransferTest2(); test.swap(data); System.out.println("m = " + data.m + ", n = " + data.n); } public void swap(Data data){ int temp = data.m; data.m = data.n; data.n = temp; } } class Data{ int m; int n; }
大家可以好好体会一下这两段代码,这些应该可以帮助理解数据类型的值传递机制!