
2.5 构造方法和匿名对象
构造方法是类中一种特殊的方法,在使用new关键字声明类的对象时用于对象的初始化。匿名对象实际上是声明类对象时的一种简单语法格式,使用匿名对象可以直接通过简化后的语句访问类成员而不必指定对象的名称。
2.5.1 类的构造方法
类的构造方法只能用于初始化类的对象。它与普通方法成员相同,也可以有自己的重载形式,也就是说类中可以存在相同方法名不同参数的构造方法。
1.创建构造方法
构造方法的声明语法格式如下:

例如,下列代码创建了一个Circle(圆)类,该类拥有一个私有的用来存储半径值的radius字段和一个可以给半径字段赋值的构造方法。

在外部程序中只能在使用new关键字创建类对象时,由系统自动调用构造方法。例如,下列语句执行时,系统会自动调用Circle类的构造方法,并将double类型数据2.31作为参数传递给构造方法。

声明和调用类的构造方法时应注意以下几个要点。
1)类的构造方法只能在使用new关键字创建类的对象时自动被调用,所以一般应使用public或缺省修饰符使其具有可以被外部访问的特质。
2)构造方法名必须与类名相同,没有返回值,也不能使用void关键字。
3)一个类可以有多个同名但参数个数或类型不同的构造方法(构造方法的重载)。
4)若类中没有声明任何一个构造方法,则在使用new关键字创建对象时系统会自动调用隐含的默认构造方法。默认构造方法没有参数,在方法体中也没有任何代码。当类中不存在任何自定义的构造方法时,默认构造方法自动存在,无须显式的声明。
2.构造方法的重载
构造方法和成员方法相同也可以有自己的重载形式。例如,下列代码为Circle类声明了3个构造方法,分别用于创建类的默认对象及在创建类对象时为半径字段赋值或同时为半径字段和高字段赋值。

在外部程序中使用new关键字创建类的对象时,可使用如下所示的形式分别调用不同的构造方法。

3.使用this关键字
在程序中如果出现了字段与局部变量同名的情况,则会出现字段变量被屏蔽,无法使用的现象。例如,下列代码中表示学号的id和两科成绩的id、score1、score2是类的字段,而类的构造方法中也有3个与之同名的、仅在方法内有效的局部变量参数。显然,如果在构造方法内直接使用id、score1和score2变量名,访问的只能是方法的参数。为了能在字段与局部变量命名冲突时对二者加以区别,Java允许使用this关键字来指明对字段的引用。

实际上this表示的就是类本身,它不但可以引用类的字段变量,也可以用来调用类的方法。例如,下列语句表示调用本类中的method()方法。

2.5.2 匿名对象
通过类创建其对象时,如果该对象在程序中仅使用一次,则可不明确指定对象名。例如,有如下所示的一个学生类。

当需要调用上述Students类的getTotal()方法时一般的做法是先创建类的对象,而后通过对象调用类的方法。例如:

如果对象的方法仅在程序中使用一次或少数的几次,也可以不指定类对象的名称而直接通过类似下列的语法来调用对象。

使用匿名对象的另一种情况是将一个类对象作为某方法的参数进行传递。例如,某个方法需要接收一个MyClass类的对象作为参数,且方法的结构如下所示:

在调用该方法时可以使用如下所示的语句:
