1.2.4 如何访问对象成员
每次创建一个类的实例时,就创建了一个对象,这个对象包含由类定义的属性和方法。使用点(.)运算符来访问(使用)该对象中的属性和方法,例如,要给rect的width变量赋值为10,应使用下面的语句:
Rectangle rect=new Rectangle(); // 定义类的对象rect
rect.width=10; // 访问对象rect的数据成员width并赋值10
该语句告诉编译器将包含在rect对象内的width属性赋值为10。当然也可以如此访问对象中的方法。
访问对象成员的一般形式为:
对象名.成员变量名
对象名.成员方法名(参数列表)
【例1-2】 利用【例1-1】定义的圆形类Round,计算半径为10的一个具体圆的周长。
public static void main (String args[]){
Round r=new Round(); // 声明并实例化圆形对象r
r.radius=10; // 访问成员变量并赋值
double p=r.perimeter(); // 调用成员方法求周长
System.out.println("半径"+r.radius+"的圆的周长是:"+p);
}
结果:
半径10.0的圆的周长是:62.8
同一个类的对象虽然都有相同的属性和方法,但其属性和方法对于每个对象都是独立的。这意味着如果有两个Rectangle对象,则每个对象都有自己的width和length的副本。其表现是改变一个对象的实例变量是不会影响另一个实例变量的。正如张三和李四都是“人”类的具体对象,但对张三做的事是不会让李四发生任何变化的。
【例1-3】 利用【例1-1】中定义的圆形类Round,生成半径为20、10的两个对象,并计算每个对象的周长。
public static void main(String args[]){ Round r1=new Round(); // 声明并实例化Round对象r1 Round r2=new Round(); // 声明并实例化Round对象r2 // 给每个对象的半径属性赋值 r1.radius = 10; r2.radius = 20; // 调用r1中perimeter()方法得到第一个圆r1的周长并打印输出 System.out.println("半径"+r1.radius+"的圆的周长是:"+r1.perimeter()); // 调用r2中perimeter()方法得到第二个圆r2的周长并打印输出 System.out.println("半径"+r2.radius+"的圆的周长是:"+r2.perimeter()); }
结果:
半径10.0的圆的周长是:62.8 半径20.0的圆的周长是:125.6
可以看到,两个由同一个Round类生成的对象中的数据完全分离,二者互不相干。
再看如下代码,在内存空间中有几个Rectangle对象?
Rectangle rect1=new Rectangle(); // 声明对象rect1并实例化 Rectangle rect2= rect1; // 声明对象rect2,并将rect1赋值给rect2
你可能认为rect1和rect2是不同的对象,但这是错误的。实际上,执行完这段代码后,rect1和rect2将引用同一个对象。将rect1赋值给rect2并不会分配任何内存也就是不能创建一个新的对象,而只是让rect2指向rect1所指向的对象。因此,rect2为对象所做的任何改变将对rect1所指向的对象产生影响,因为它们是同一个对象。(如图1-3所示。)
图1-3 变量rect1和变量rect2引用同一个对象
特别提示:
当把一个指向对象的引用变量赋给另一个对象引用变量时,并没有创建该对象的副本,而只是创建该引用的一个副本。
工作分解-操作方案
1.定义主类;
2.用1.2.3节生成的Rectangle类创建类对象;
3.给对象属性赋值;
4.调用对象方法完成具体功能,获得周长和面积。
工作实施
1.定义主类(包含了main方法的类)
public class RectangleTest{ public static void main(String args[]){// 主方法 } }
2.创建类的对象
Rectangle rect=new Rectangle(); // 声明并实例化对象rect
3.访问对象,给对象属性赋值,并调用方法
// 向成员变量赋值 rect.length = 10.0; rect.width = 5.0; // 打印出指定长方形的长、宽、周长和面积 System.out.println("长方形的长:"+rect.length+"\t宽:"+rect.width); System.out.println("这个长方形的周长是:"+rect.perimeter()); System.out.println("这个长方形的面积是:"+rect.area());
4.代码调试运行
长方形的长:10.0 宽:5.0 这个长方形的周长是:30.0 这个长方形的面积是:50.0