大多数方法不需要自变量。自变量对方法没有特殊要求。也就是说,带自变量的方法,可以完成各种数据操作,它还可以用在很多有微妙差别的情况。为了说明这一点,让我们举一个非常简单的例子。下面的方法返回数字10的平方:
int square()
{
return 10 * 10;
}
运行该方法,确实返回了10 的平方的值,但它的使用是很有限的。然而,如下所示,如果你修改该方法,以便它带一个自变量,这样square( )就更有用了。
int square(int i)
{
return i * i;
}
现在,square()可以返回任何调用它的值的平方。也就是说,square()现在是可以计算任何整数值的平方的一个通用方法,而不单纯是数字10 。 下面是一个例子:
int x,y;
x = square(5); // x equals 25
x = square(9); // x equals 81
y = 2;
x = square(y); // x equals 4
在第一次调用square( )时,值5被传递给自变量i。在第二次调用时,i接收到值9。第三次调用时,将值传递给y,在本例中是 2 。如这些例子所示,square ( )可以返回传递给它的任何数据的平方。
区分自变量(parameter)和参数(argument)这两个术语是很重要的。自变量是方法定义的一个变量,当方法被调用时,它接收一个值。例如在square()中,i就是一个自变量。
参数是当一个方法被调用时,传递给该方法的值。例如,square(100)把100作为参数传递。
在square()中,自变量i接收该值。
可以使用一个带自变量的方法来改进Box类。在前面的例子中,每个盒子的尺寸不得不用单独的语句顺序的来设置,例如:
mybox1.width = 10;
mybox1.height = 20;
mybox1.depth = 15;
本例中的代码在执行时,它在两个方面比较麻烦。首先,它笨拙且容易发生错误。例如,很容易忘记设置其中的一个尺寸。其次,在设计的很好的Java程序中,实例变量应该仅仅由定义类的方法来存取。在后面,你可以改变一个方法的行为,但是你不能改变一个暴露的实例变量的行为。
这样,设置一个盒子尺寸的更好的途径是创建一个自变量代表盒子尺寸的方法,而且适当地设置每个实例变量。下面的例子实现了这个想法。
// This program uses a parameterized method.
class Box {
double width;
double height;
double depth;
// compute and return volume
double volume() {
return width * height * depth;
}
// sets dimensions of box
void setDim(double w,double h,double d) {
width = w;
height = h;
depth = d;
}
}
class BoxDemo5 {
public static void main(String args[]) {
Box mybox1 = new Box();
Box mybox2 = new Box();
double vol;
// initialize each box
mybox1.setDim(10,20,15);
mybox2.setDim(3,6,9);
// get volume of first box
vol = mybox1.volume();
System.out.println("Volume is " + vol);
// get volume of second box
vol = mybox2.volume();
System.out.println("Volume is " + vol);
}
}
正如你看到的,setDim方法用来设置每个盒子的尺寸,例如,当下面的语句执行后:
mybox1.setDim(10,20,15);
10被拷贝进参数w,20被拷贝进h,15被拷贝进d。在setDim( )内的w、h、d的值分别赋给width、height和depth。
许多读者,特别是那些有C/C++经验的读者,对前面章节中的概念会比较熟悉。但是,如果像方法调用、参数、自变量这些概念对你来说比较新的话,在继续学习以前,你要花些时间来练习。方法调用,自变量,返回值这些概念是Java编程的基础。