说完了类和对象,我们再对类的成员中的方法做一个详细的讲解
方法的定义本身比较简单,我在这里就不说了,关于上面提到的类和对象,大家可以参考我上一篇文章:面向对象有那么难吗?一个月搞定面向对象——第一周(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;
}
大家可以好好体会一下这两段代码,这些应该可以帮助理解数据类型的值传递机制!