零基础学Java第2版
上QQ阅读APP看书,第一时间看更新

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
这个就是这个同学的成绩

8.2.2 对象的成员变量

成员变量是什么呢?理解了成员方法,一定可以知道成员变量是什么。成员变量就是对象所拥有的、并且代表对象的属性值,例如一个自行车对象,它的颜色、材料等都是自行车的属性值,也可以说是它的成员变量。

提起成员变量,就想到前面讲过的局部变量。其实这里说的成员变量相当于前面说过的类变量。它也可以不用初始化,系统自动给它赋值。局部变量就不能不初始化了,否则在编译的时候会报错,前面已经有过实例,此小节就不再赘述。