(59)类(二)

最后更新于:2022-04-01 10:59:34

## Java编程那些事儿59——类(二) 郑州游戏学院陈跃峰 出自:[http://blog.csdn.net/mailbomb](http://blog.csdn.net/mailbomb) ##### 8.2.2.3 构造方法声明 构造方法(Constructor),也称作构造函数、构建器等,是初学者在学习时最容易混淆的概念之一。下面首先讲述构造方法和方法的区别。 构造方法和方法无任何关系,只是在翻译时名称比较类似罢了。而且构造方法和方法的功能不同,声明和调用的语法也不相同。 构造方法的功能:实现类这种数据类型的变量的初始化。由于类是一种复合数据类型,而复合数据类型的变量也比较复杂,所以专门需要对该类变量进行初始化,则语法上提供了专门的结构——构造方法。这就是构造方法出现的原因。而方法实现的是逻辑的功能,对应于逻辑上的算法,更多的是实现程序逻辑。所以构造方法是语法结构,而方法是逻辑功能,两者之间根本无关。 构造方法声明的语法格式: ~~~                    访问控制符构造方法名称(参数列表){                             构造方法体;                    } ~~~ 在该语法中,访问控制符指声明的构造方法被访问的权限,构造方法名称是标识符,语法上要求构造方法的名称必须类名相同,后续小括号内部是参数列表,其语法格式和方法参数列表的语法格式相同。 下面是构造方法的示例: ~~~                    public class Box{                             int length;                             int width;                             int height;                               public Box(){                                      length = 10;                                      width = 10;                                      height = 10;                             }                               public Box(int l,int w,int h){                                      length = l;                                      width = w;                                      height = h;                             }                    } ~~~ 在该Box类中,声明了两个构造方法,一个没有参数,一个包含三个int类型的参数。在没有参数的构造方法中,将三个属性的值都初始化为10。带参数的构造方法中,可以传递进来三个参数,然后在构造方法内部依次把参数的值赋值给属性。 通常情况下,构造方法的声明放在属性声明和方法声明的中间。 一个类内部的构造方法可以有任意多个,但是要求这些构造方法不能相同。因为在一个类内部构造方法的名称都是相同的,所以只要参数列表相同的构造方法都是相同的构造方法。例如以下两个构造方法是相同的:                    public  Test(int a,int[] b){}                    public  Test(int b,int[] a){} 如果一个类声明中不包含构造方法的声明,则系统会自动为该类添加一个构造方法,当然如果类中已声明了构造方法则系统不会添加,这个系统自动添加的构造方法一般被称为默认构造方法,其声明格式如下: ~~~                    public 构造方法名称(){}          所以以下两个代码是相同的:                    public class DefaultConstructor{                             int  a;                   }          和                    public class DefaultConstructor{                             int  a;                             public DefaultConstructor(){}                    } ~~~ 在第一个代码中,没有声明构造方法,则系统自动添加默认的构造方法,而第二个代码中声明的构造方法和默认构造方法的结构一致,所以两个代码在功能上是完全相同的。 总之,构造方法是系统提供的一个结构,该结构的功能是实现对于类的变量的初始化,可以根据逻辑的需要声明对应的构造方法,并在构造方法内部根据需要进行具体的初始化。 ##### 8.2.2.4 面向对象基础使用 下面以一个简单的示例来描述面向对象的基本使用,主要是类声明的相关语法,以及基础的类设计的知识。 使用面向对象的方式来描述房屋的结构,要求如下: (1) 门:(颜色为红色、可以被推开和关闭) (2) 窗户:(颜色为白色、有一块玻璃(透明色、可以卸下)、可以被推开和关闭) (3) 地:(由100块地板砖组成) (4) 地板砖:(黄色、长1米、宽1米) 说明:其中红色用1代替,白色用2代替,黄色用3代替透明色用0代替。 在使用面向对象描述时,将其中的名词转换为类,将该类内部的特征转换为属性,将该类内部的功能转换为方法,在构造方法内部实现对于属性的初始化。 则在该要求中,抽象的类一共有5个:门、窗户、玻璃、地和地板砖。其中的颜色作为对应类的属性,推开和关闭作为对应类的方法。前面介绍过类是一种数据类型,则可以声明类类型的变量,并可以将该变量作为类的属性,这种类和类的关系在面向对象中称作使用关系。则按照该思路实现的代码如下: ~~~                    /**                   * 门的类          * 文件名:Door.java                   */ public class Door {                             /**颜色*/                             int color;                             public Door(){                                      color = 1;  //初始化颜色                             }                             public void open(){}                             public void close(){} } /**  * 窗的类  * 文件名:Window.java  */ publicclass Window {          /**颜色*/          int color;          public Window(){                    color = 2;  //初始化颜色          } publicvoid open(){}          publicvoid close(){}   } /**  * 玻璃类  * 文件名:Glass.java  */ publicclass Glass {          /**颜色*/          int color;          public Glass(){                    color = 0; //初始化颜色          }          publicvoid remove(){} } /**  * 地板类  * 文件名:Floor.java  */ public class Floor {          FloorBrick[] fb;          public Floor(){                    fb = new FloorBrick[100];                    for(int i = 0;i < fb.length;i++){                             fb[i] = new FloorBrick();  //初始化每个元素                    }          } } /**  * 地板砖类  * 文件名:FloorBrick.java  */ publicclass FloorBrick {          /**颜色*/          int color;          /**长度*/          int length;          /**宽度*/          int width;          public FloorBrick(){                    color = 3; //初始化颜色                    length = 1; //初始化长度                    width = 1; //初始化宽度          } } ~~~ 说明:在Floor类的代码中涉及到对于类类型的变量初始化的问题,相关语法将在后续详细介绍。 在该示例中,使用面向对象的思想描述了要求的房屋结构,并以Java语言语法的格式将面向对象的思想转化为具体的代码,从而实现对于面向对象技术的基本使用。
';