第十八次Java作业

目录

一、使用枚举类型

1.1  枚举类型的基本使用

1.2  枚举类型的介绍

1.3  枚举类型的定义

1.4  枚举实现的接口

1.5  枚举的优缺点


一、使用枚举类型

1.1  枚举类型的基本使用

枚举类型用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。

枚举(enum)类型是Java 5新增的特性,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示。

所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类(可以实现接口)。

枚举类型是Java 5中新增特性的一部分,它是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁性、安全性以及便捷性。

枚举类型Day中分别定义了从周一到周日的值,这里要注意,值一般是大写的字母,多个值之间以逗号分隔。同时我们应该知道的是枚举类型可以像类(class)类型一样,定义为一个单独的文件,当然也可以定义在其他类内部,更重要的是枚举常量在类型安全性和便捷性都很有保证,如果出现类型问题编译器也会提示我们改进,但务必记住枚举表示的类型其取值是必须有限的,也就是说每个值都是可以枚举出来的,比如上述描述的一周共有七天。

public class EnumDemo {

public static void main(String[] args){ //直接引用

Day day =Day.MONDAY;

}

}

1.2  枚举类型的介绍

枚举类型是一种特殊的数据类型,它使得变量成为一组预定义常量。所以在需要表示一组固定常量时应尽量使用枚举类型。通过关键字enum来定义枚举类,它和普通类一样可以有构造器、成员变量、方法。

//定义枚举类要用关键字enum

public enum 枚举类名{

枚举项1,枚举项2,枚举项3...;

构造方法

成员变量

成员方法

package IFather;
public class PbPayFactory { 
    //微信支付类型
    public static final String weixinPayType = "weixin";//微信支付接口地址
    public static final String weixinPayurl ="https://api.mch.weixin.qq.com/pay/";
    //支付宝支付类型
    public static final String aliPayType = "ali";
    public static final String aliPayurl ="https://openapi.alipay.com/";
    //银联支付类型
    public static final String unionPayType = "union";
    public static final String unionPayurl ="https://gateway.95516.com/gateway/api/";
 
    //根据支付类型获取支付服务对象
    public static PbPayFactory getPay(String payType){
    	PbPayFactory pay =null;
        switch(payType){
            case PbPayFactory.weixinPayType:
                //构造微信支付对象... 
                break;
            case PbPayFactory.aliPayType:
                //构造支付宝支付对象... 
                break;
            case PbPayFactory.unionPayType:
                //构造银联支付对象...
                break;
            default:
                break;
        }
        return pay;
    }
}

 枚举类在经过编译后确实是生成了一个扩展了java.lang.Enum的类

枚举类是final的,因此我们无法再继承它了

我们定义的每个枚举值都是该类中的一个成员,且成员的类型仍然是Season类型

枚举类中被默认增加了许多静态方法,例如values()等

1.3  枚举类型的定义

package IFather;
public enum PayEnum {
	    /**
	     * //微信支付类型
	     *     public static final String weixinPayType = "weixin";//微信支付接口地址
	     *     public static final String weixinPayurl ="https://api.mch.weixin.qq.com/pay/";
	     *     //支付宝支付类型
	     *     public static final String aliPayType = "ali";
	     *     public static final String aliPayurl ="https://openapi.alipay.com/";
	     *     //银联支付类型
	     *     public static final String unionPayType = "union";
	     *     public static final String unionPayurl ="https://gateway.95516.com/gateway/api/";
	     */
	    //枚举项,采用全部大写命名
	    //枚举项就是一个一个对象,它是常量,可定义枚举项的时候调用构造方法
	    WEIXINPAY("weixin","https://api.mch.weixin.qq.com/pay/"),
	    ALIPAY("ali","https://openapi.alipay.com/"),
	    UNIONPAY("union","https://gateway.95516.com/gateway/api/");
	 
	    private String name;//支付名称
	    private String payUrl;//支付地址
	 
	    //定义构造方法,枚举类型构造方法是private
	    private PayEnum(){
	    }
	    private PayEnum(String name,String payUrl) {
	        this.name= name;
	        this.payUrl =payUrl;
	    }
	    /**
	    * @return the name
	     */
	    public String getName() {
	        return name;
	    }
	    /**
	    * @param name the name to set
	    */
	    public void setName(String name) {
	        this.name = name;
	    }
	    /**
	    * @return the payUrl
	    */
	    public String getPayUrl() {
	                    return payUrl;}
	    /**
	    * @param payUrl the payUrl to set
	    */
	    public void setPayUrl(String payUrl){
	        this.payUrl = payUrl;
	    }
	 
	    public static void main(String[] args) {
	    //枚举项就是一个对象(实例)
	        PayEnum weixinPay=PayEnum.WEIXINPAY;
	        System.out.println(weixinPay.getName());
	        System.out.println(weixinPay.getPayUrl());
	    }
	}

  

枚举类型用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。 定义: 是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内.

定义枚举类型变量有三种方法,即:先定义类型后定义变量,定义类型的同时定义变量,直接定义

变量,现介绍如下:

 1.先定义类型后定义变量
  格式: <枚举类型名> <变量1>〔,<变量2>,…,<变量n>〕;
  例如:enum colors
  {red=5,blue=1,green,black,white,yellow};
  colors c1,c2;
  c1、c2 为colors类型的枚举变量。

  2.定义类型的同时定义变量

  格式:enum <枚举类型名>
  { <枚举元素表> } <变量1>〔,<变量2>,…,<变量n>〕;
  例如:enum colors
  {red=5,blue=1,green,black,white,yellow}c1,c2;

 枚举类型定义的一般形式

C语言中提供的定义枚举类型的语句格式如下。

enum 枚举名 { 枚举值表 };

在枚举值表中罗列出所有可用的值,这些值也称为枚举元素,元素之间用逗号分隔开。例如,定义一个性别的枚举类型:

enum sex { male, female};

其中 sex 为枚举类型名,其元素有两个。凡被说明为 sex 类型的变量的值只能是 male 和 female 两个值中的一个。

1.4  枚举实现的接口

先定义一个接口

/**
 * 定义一个接口
 */
interface Info {
    void describe();
}

 创建一个枚举类实现该接口

/**
 *  枚举类实现接口
 */
public enum EnumImplement implements Info{ 
 }

 枚举接口

/**
 *系统代码接口
 */
public interface SystemCode {
        //系统代码
        int getcode();
        //代码对应的描述
        String getdesc();
}

枚举类型

package IFather;
public enum CodeEnum implements SystemCode {
    ERROR(-1,"系统异常"),
    FAILURE(0,"操作失败"),
    SUCCESSFUL(1,"操作成功"),
    LOGINSUCCESSFUL(100,"登录成功");
    private CodeEnum(int code,String desc) {
        this.code = code;
        this.desc = desc;
}
    int code;//系统代码
    String desc;//代码对应的描述
    public int getcode() {
        return code;
    }
    public String getdesc() {
        return desc;
}
    public static void main(String[] args) {
        System.out.println(CodeEnum.SUCCESSFUL.getcode());
        System.out.println(CodeEnum.SUCCESSFUL.getdesc());
//枚举项可以向上转型为接口类型
        SystemCode code=CodeEnum.SUCCESSFUL;
        System.out.println(code.getcode());
        System.out.println(code.getdesc());
}
}

 

每一个枚举值都是一个实例,默认是空参构造,如果你需要带参构造实例,则需要定义相应构造方法。

枚举实现接口的方法都是public修饰,这是由于接口默认是public修饰,子类重写的方法访问权限要大于等于父类(接口)。

枚举值中重写的是枚举类型的方法,枚举类型的方法是对于接口的抽象方法的重写。

1.5  枚举的优缺点

优点:

1.能举出所有情况,保证解为正确解。

2.能解决许多用其他算法难以解决的问题。

3.便于思考与编程。

4.算法简单,在局部地方使用枚举方法,效果十分的好。

缺点:为何要叫做暴力枚举呢?因为暴力出奇迹,但是暴力在大多数情况下都是不可取。枚举仅适用于一些规模较小的问题。

每一个枚举值都是一个对象,在使用它时会增加额外的内存消耗,所以枚举相比与 Integer 和 String 会占用更多的内存。

如果你的应用使用很多的 Enum ,最好使用Integer 或 String 替代他们,但是这样还会有问题。

运算量过大,当问题的规模变大的时候,循环的阶数越大,执行速度越慢 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值