Java认证考试实例疑难辨析(8)

来源:互联网 发布:ubuntu如何使用cd命令 编辑:程序博客网 时间:2024/05/01 22:28

8.

【知识点】

(1)枚举类型(Enum Type)

枚举类型允许预定义一组常量,并且只能从这组常量中取值,每个枚举常量在声明时可以定义它的属性值,属性值包含在常量名后的圆括号中,如果没有声明属性值,则由系统按默认规则分配属性值。习惯上,枚举常量名的字母都大写。

Java语言中枚举类型的关键词是enum,例如:

public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY 
}

Java语言的枚举类型隐式地继承了java.lang.Enum类,因此,它本质上是一个类(class),可以包含方法和字段,但却不能再继承其他任何类了。另外,编译器在创建枚举对象时会自动添加一些特殊方法,如静态方法values()会按定义枚举类型时常量顺序返回一个包括所有枚举值的数组。

(2)定义枚举类型

枚举类型中除了枚举常量列表,还可定义方法、字段,枚举常量必须定义在整个枚举类的开始部分,即必须先于所有字段和方法定义。

当枚举类型中包含字段、方法时,枚举常量列表必须以分号结束。

另外,枚举类型还可以定义构造方法,构造方法访问类型是package-private或private。

下面是一个包含方法、字段的枚举类型:

public enum Planet {

    MERCURY(3.303e+23, 2.4397e6),

    VENUS   (4.869e+24, 6.0518e6),

    EARTH   (5.976e+24, 6.37814e6),

    MARS    (6.421e+23, 3.3972e6),

    JUPITER(1.9e+27,   7.1492e7),

    SATURN  (5.688e+26, 6.0268e7),

    URANUS  (8.686e+25, 2.5559e7),

    NEPTUNE(1.024e+26, 2.4746e7);

 

    private finaldouble mass;   // in kilograms

    private finaldouble radius; // in meters

    Planet(doublemass, double radius) {

        this.mass =mass;

        this.radius= radius;

    }

    private doublemass() { return mass; }

    private doubleradius() { return radius; }

 

    // universalgravitational constant

    public staticfinal double G = 6.67300E-11;

 

    doublesurfaceGravity() {

        return G *mass / (radius * radius);

    }

    doublesurfaceWeight(double otherMass) {

        returnotherMass * surfaceGravity();

    }

    public staticvoid main(String[] args) {

        if(args.length != 1) {

           System.err.println("Usage: java Planet <earth_weight>");

           System.exit(-1);

        }

        doubleearthWeight = Double.parseDouble(args[0]);

        double mass= earthWeight/EARTH.surfaceGravity();

        for (Planetp : Planet.values())

          System.out.printf("Your weight on %s is %f%n",

                             p, p.surfaceWeight(mass));

    }

}

 

在上例中,每个枚举常量在声明时可以定义它的属性值,属性值包含在常量名后的圆括号中,如:EARTH (5.976e+24, 6.37814e6),这表示EARTH常量有两个属性值,这两个属性值在使用EARTH常量时会传递给枚举类型的构造方法Planet(double mass,double radius)中对应的参数,因此,应该注意枚举类型构造方法参数与常量属性之间类型、个数、次序的对应关系。每个枚举类型常量在使用时就相当于创建了一个枚举类型的实例,除了枚举类型中声明的枚举常量外不能再创建其他实例。

【例题】

Given:

class Nav{

publicenum Direction { NORTH, SOUTH, EAST, WEST }

}

public class Sprite{

// insertcode here

}

Which code, inserted at line 14, allows the Spriteclass to compile?

A. Direction d = NORTH;

B. Nav.Direction d = NORTH;

C. Direction d = Direction.NORTH;

D. Nav.Direction d = Nav.Direction.NORTH;

【Answer】D

【例题辨析】

A. (1)枚举类型Direction相当于Nav的内部类,声明它的变量时,Direction d应修改为Nav.Direction d;(2)使用枚举常量时应该指定枚举类型名,因此NORTH应修改为Direction.NORTH。

B. 使用枚举常量时应该指定枚举类型名,因此NORTH应修改为Direction.NORTH。

C. 枚举类型Direction相当于Nav的内部类,声明它的变量时,Direction d应修改为Nav.Direction d.

D. 符合枚举类型使用语法。
0 0