1.9枚举类

当我们想定义一种新类型时,发现这个类型的对象的可取值是我一定的范围,并且所有的可取值是可一 一列举

声明枚举类

[public] enum 枚举类型名称 [implement 接口名称列表] {

  • 枚举值;
    
  • 变量成员声明及初始化;
    
  • 方法声明及方法体; 
    

}

//枚举类

//定义学生成绩枚举类
 enum Score{
    EXCELLENT,//优秀
    QUALIFIED, //合格
    FAILED; //不合格
 };

//测试类

public class ScoreTest{

     //主方法
   
     public static void main(String[] args){
           giveScore(Score.EXCELLENT);
     }
     
     //giveScore方法参数 传入 枚举类属性
     public static void giveScore(Score s){
              switch(s){
                  case EXCELLENT;
                      System.out.println("Excellent");
                      break;
                   case QUALIFIED;
                      System.out.println("QUALIFIED");
                      break;
                   case FAILED;
                      System.out.println("FAILED");
                      break;
                } 
          }  
} //ScoreTest类结束

枚举类的特点

  • 枚举类定义实际上是定义了一个类
  • 所有枚举类型都隐含继承(扩展)自java.lang.Enum,因此枚举类型不能再继 续继承其他任何类(java单继承机制)
  • 枚举类型的类体中可以包括方法和变量
    -枚举类型的构造方法必须是包内私有或者私有的。定义在枚举开头的常量会被自动创建,不能显式地调用枚举类的构造方法(枚举类构造方法比较特殊的地方)

枚举类型的默认方法

  • 静态的values()方法用于获得枚举类型的枚举值的数组(返回一个包含所有枚举值的数组)
  • toString方法返回枚举值的字符串描述(将枚举值转成字符串类型)
  • valueOf方法将以字符串形式表示的枚举值转化为枚举值类型的对象
  • Ordinal方法获得对象在枚举类型中的位置索性

例:声明了变量和方法的枚举类

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 final double mass;   // in kilograms(千克)
    private final double radius; // in meters(米)
    Planet(double mass, double radius) {
        this.mass = mass;
        this.radius = radius;
    }
    private double mass() { return mass; }
    private double radius() { return radius; }

    // universal gravitational constant  (m3 kg-1 s-2)
    public static final double G = 6.67300E-11;
    //静态变量G为整个类所有,是static常量

    double surfaceGravity() {//表面引力
        return G * mass / (radius * radius);
    }
    double surfaceWeight(double otherMass) {
        return otherMass * surfaceGravity();
    }

//主函数
    public static void main(String[] args) {
        if (args.length != 1) {
            System.err.println("Usage: java Planet <earth_weight>");
            System.exit(-1);
        }
        double earthWeight = Double.parseDouble(args[0]);
        double mass = earthWeight/EARTH.surfaceGravity();
        for (Planet p : Planet.values())
           System.out.printf("Your weight on %s is %f%n",
                             p, p.surfaceWeight(mass));
    }
}

//定义了Planet的引用p(冒号后面调用枚举类型已有方法,返回整个枚举构成的数组,for循环会依序取出数组的各个元素,每次取出一个元素,都会把引用赋给p)
System.out.printf(“Your weight on %s is %f%n”),
p,p.surfaceWeight(mass));
//枚举值是一个对象,对象有自己的行为能力
//枚举对象在定义枚举类时自动被构造

说明
-本例取自《The Java Tutorials》
-http://docs.oracle.com/javase/tutorial/java/TOC.html
-Planet是一个代表太阳系中行星的枚举类型,其中定义了mass和radius常量(final)成员

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值