10. 2.方法体
方法声明之后的一对大括号“{” ,“}”以及之间的内容称为方法的方法体。
方法体的内容包括局部变量的声明和Java语句。
在方法体内可以对成员变量和方法体中声明的局部变量进行操作。在方法体中声明的变量和方法的参数被称作局部变量,如:
int getSum(int n) { //参数变量n是局部变量
int sum=0; // 声明局部变量sum
for(int i=1;i<=n;i++) { // for循环语句
sum=sum+i;
}
return sum; // return 语句
} 和类的成员变量不同的是,局部变量只在方法内有效,而且与其声明的位置有关。
方法的参数在整个方法内有效,方法内的局部变量从声明它的位置之后开始有效。如果局部变量的声明是在一个复合语句中,那么该局部变量的有效范围是该复合语句,如果局部变量的声明是在一个循环语句中,那么该局部变量的有效范围是该循环语句。例如:
public class A {
void f() {
int m = 10,sum = 0; //成员变量,在整个类中有效
if(m>9) {
int z = 10; //z仅仅在该复合语句中有效
z = 2*m+z;
}
for(int i=0;i
11. 3.区分成员变量和局部变量 如果局部变量的名字与成员变量的名字相同,则成员变量被隐藏,即该成员变量在这个方法内暂时失效。例如: class Tom {
int x = 10,y;
void f() {
int x = 5;
y = x+x; //y得到的值是10,不是20。如果方法f 中没有“int x=5;”,y的值将是20
}
}
如果想在该方法中使用被隐藏的成员变量,必须使用关键字this(在4.9节this关键字) class Tom {
int x = 10,y;
void f() {
int x = 5;
y = x+this.x; //y得到的值是15
}
}
第 11 页
12. 4.局部变量没有默认值 成员变量有默认值(见后面的4.3节),但局部变量没有默认值,因此在使用局部变量之前,必须保证局部变量有具体的值 。例如:下列InitError类无法通过编译 class InitError {
int x = 10,y; //y的默认值是0
void f() {
int m; //m没有默认值,但编译无错误
x = y+m; //无法通过编译,因为在使用m之前未指定m的值
}
} 第 12 页
20. §4.3.4 对象的引用和实体 当用类创建一个对象时,类中的成员变量在分配内存空间,这些内存空间称作该对象的实体或对象的变量,而对象中存放着引用。
一个类创建的两个对象,如果具有相同的引用,那么就具有完全相同的实体。 使用Point类分别创建了两个对象p1,p2:
Point p1 = new Point (5,15);
Point p2 = new Point(8,18); 内存模型如图4.9所示
第 20 页