8.2 对象家族中的成员

对象家族中有什么呢?有对象的成员方法和对象的成员变量,这些都有什么含义?如何使用它们?在本节中,将会通过实例详细地讲述。

8.2.1 对象的成员方法

方法就是能够让这个对象做什么,或者表现出什么状态的函数。举一个例子,有一个自行车的对象,如何让它停止、如何驾驶它,这些都是前面所提到的方法。方法就是其他编程语言中所提到的函数,而这个函数用来实现对象的某个功能,或表现出对象的某个状态。

什么是成员?成员的意思就是指它是属于对象的,就好比某个俱乐部的成员是属于这个俱乐部的一样。

将前面两个概念连在一起,就很清楚了。所谓的成员方法就是属于对象的,能够让对象做什么或表现出什么状态的函数。

【实例8.2】下面看一个实例。


01 public class object2

02 {

03 void print()

04 {

05 System.out.println("小明是一名优秀的程序员");

06 }

07 public static void main(String[]args)

08 {

09 object2 m=new object2();

10 m.print();

11 }

12 }


【代码说明】从这个程序段中,可以看到“print()”函数其实就是“object2”这个类中的成员方法。要想使用这个成员方法,必须根据这个类“object2”构造出一个对象,再利用这个对象初始化一个对象句柄,这样就可以利用这个句柄来访问这个成员方法。

【运行效果】


小明是一名优秀的程序员


【实例8.3】下面再看一个复杂一点的有关成员方法的实例。


01 public class object3

02 {

03 public void print()

04 {

05 for(int i=0;i<=5;i++)

06 {

07 for(int j=5-i;j>=0;j—)

08 {

09 System.out.print("*");

10 }

11 System.out.println();

12 }

13 }

14 public static void main(String[]args)

15 {

16 object3 pro=new object3();

17 pro.print();

18 }

19 }


【代码说明】在这个程序中,构造了一个方法“print()”,然后构造对象pro,通过pro来访问这个方法。【运行效果】






**

*


【实例8.4】仔细来看看下面的程序,将上面程序改变一下。


01 public class object4

02 {

03 public static void main(String[]args)

04 {

05 for(int i=0;i<=5;i++)

06 {

07 for(int j=5-i;j>=0;j—)

08 {

09 System.out.print("*");

10 }

11 System.out.println();

12 }

13 }

14 }


【代码说明】这段程序没有定义类中的方法“print()”,而是直接输出内容。这是一种面向过程开发的程序。

【运行效果】






**

*


这个程序是否比前面那个程序段读起来要费劲呢?而这个就是面向对象程序设计和面向过程程序设计的最大区别。面向对象的程序设计将这个程序中每个部件(包括成员方法),作为一个模块,等要使用它的时候,再随时调用它们,而面向过程的程序设计,将这个程序的需求按照顺序的步骤来编写。

下面再分析一下实例8.3中的代码,在面向对象的程序设计中,读者一定要学会一点,首先看主运行程序,也就是“public static void main(String[]args){}”。在这个主运行程序中,看到了两句代码。一句是对象初始化语句,一句是利用对象引用成员方法的语句,这样读者就很清楚,这个程序要干什么,然后再仔细地看这个成员方法是干什么的,这样会使整个程序变得越来越轻松。


【实例8.5】成员方法越来越复杂。面向对象的程序设计的思路,会使得程序很容易读。下面再看一个更加复杂的程序,来体会使用成员方法的优点。


01 public class object5

02 {

03 public void print2()

04 {

05 for(int i=5;i>0;i—)

06 {

07 for(int k=0;k<=(5-i);k++)

08 {

09 System.out.print("");

10 }

11 for(int j=1;j<=(2*i-1);j++)

12 {

13 System.out.print("*");

14 }

15 System.out.println();

16 }

17 }

18 public void print1()

19 {

20 for(int i=1;i<=5;i++)

21 {

22 for(int j=0;j<=(5-i);j++)

23 {

24 System.out.print("");

25 }

26 for(int k=1;k<=(2*i-1);k++)

27 {

28 System.out.print("*");

29 }

30 System.out.println();

31 }

32 }

33 public static void main(String[]args)

34 {

35 object5 pro=new object5();

36 pro.print1();

37 pro.print2();

38 }

39 }


【代码说明】这个程序段看起来有点复杂,使用上面说的读程序的方法。首先看看主运行程序,在主运行程序中有3句:一句是对象初始化语句,一句是引用“print1()”方法,最后一句是引用“print2()”方法。然后再看“print1()”和“print2()”两个方法是如何实现的。至于这个方法的实现过程,应该很简单,只不过是一个多层for循环语句而已,读者可以自己分析它的实现过程。

【运行效果】


*









*


成员方法就是函数段,而函数段拥有自己的特性。在定义函数时必须遵照下面的结构:


返回值类型方法名(形式参数)

{

方法体

}


首先来讨论一下返回值类型。什么叫返回值?返回值就是一个函数结果所获得的值,将这个值返回到主程序中,并且将这个值作为主程序中运行的参数的值。

【实例8.6】下面看一个有关返回值的例子。


01 public class object6

02 {

03 int print(int x)

04 {

05 return 2*x;

06 }

07 public static void main(String[]args)

08 {

09 object6 pro=new object6();

10 System.out.println(pro.print(3));

11 }

12 }


【代码说明】这个程序段中,第3行创建了一个“int print(int x)”方法,在这个方法中返回了“2*x”,将这个值带回到主运行程序中去,于是在主运行程序中,根据“pro.print(x)”中的参数“x=3”,得出这个方法的返回值是6。其实还有两个概念希望读者能清楚,就是实参和形参。刚才说的“int print(int x)”中的“x”就是形参,而主运行程序中相同函数的参数被称为实参。

【运行效果】


6


上面说到返回值,但有的函数方法是没有返回值的,那该如何处理呢?在程序设计中,如果一个方法函数没有返回值,那么可以将函数结构中的返回值类型写成“void”,这个就代表此函数无返回值。

【实例8.7】例如下面的程序段。


01 public class object7

02 {

03 void print()

04 {

05 System.out.println("我是一名程序员");

06 }

07 public static void main(String[]args)

08 {

09 object7 pro=new object7();

10 pro.print();

11 }

12 }


【代码说明】第3行定义了print()方法,其只是输出一段内容,并不返回任何值,所以定义为void类型。第10行演示如何调用这个方法。

【运行效果】


我是一个名程序员


【实例8.8】上面的程序段就是一个无返回值类型的程序例子。为了加深印象,下面看一个详细的复杂的实例。


01 public class object8

02 {

03 public int sum(int x, int y, int z)

04 {

05 int sum;

06 return sum=x+y+z;

07 }

08 public int aver(int x, int y, int z)

09 {

10 int aver;

11 return aver=(x+y+z)/3;

12 }

13 void print()

14 {

15 System.out.println("这个就是这个同学的成绩");

16 }

17 public static void main(String[]args)

18 {

19 object8 num=new object8();

20 System.out.println(num.sum(90,80,70));

21 System.out.println(num.aver(90,80,70));

22 num.print();

23 }

24 }


【代码说明】以上的程序中包含无返回值的print()方法(第13~16行),同时也包含了带返回值的方法sum()和aver()(第3~12行)。

【运行效果】


240 80

这个就是这个同学的成绩