Java小记 枚举


概述

  • 关键字 enum
  • 枚举类型可以取代以往常量定义方式(将常量封装在类或接口中)
  • 提供了安全检查功能
  • 本质上还是以类的形式存在
  • 定义一个枚举类型时,每一个枚举累心成员都可以看做时枚举类型的一个实例。
  • 枚举类型成员默认为final, public, static【但是属性就。。】
  • 枚举类构造方法必须是 private

常用方法

方法说明示例
values()将枚举类型成员以数组形式返回Contents01.values()
valueOf()将字符串转化成枚举实例Contents02.valueOf(“abc”)
compareTo()比较两个枚举对象在定义上时的顺序Contents_a.compareTo(Contents_b)
ordinal()得到枚举成员的位置索引Contents_a.ordinal()

示例

1.示例01

import static java.lang.System.out;

public class OneTest {
    enum Student{
        // 枚举类成员
        Mick(1802011, "Mick"),
        Fry(1802012, "Fry"),
        Leela(1802013),
        Bender("Bender is GREAT!"),
        NoOne();

        // 属性/常量
        final private int id;
        private String name;
        double score;
        /*=========================================================*/
        // 构造方法,--private--
        private Student(int id, String name){
            this.id = id;
            this.name = name;
        }
        private Student(int id){
            this.id = id;
            this.name = "None";
        }
        private Student(String name){
            this.id = -1;
            this.name = name;
        }
        private Student(){
            this.id = -1;
            this.name = "None";
            this.score = 99;
        }
        /*===========================End===========================*/
        // ------------------get()-----------------------------------
        public int get_id(){
            return this.id;
        }
        public String get_name(){
            return this.name;
        }
        // --------------------------------------------------------
    }

    public static void main(String[] args){
        String[] names = {"Mick", "Fry", "Leela", "Bender"};
        /* =========================================================
        * 第一种遍历、获取相应对象方法
        *  ---------Contents.valueOf(String cont)--------------
        * : 返回字符串对应的 枚举类对象
        * ============================================================ */
        for(String name:names)
        {
            Student stu = Student.valueOf(name);
            out.println("id :" + stu.get_id() +
                    "\t name: " + stu.get_name());
        }
        out.println("---".repeat(8));
        /* =========================================================
         * 第二种遍历、获取相应对象方法
         *  ---------Contents.values()--------------
         * : 返回枚举类对象 列表
         * ============================================================ */
        for(Student stu:Student.values())
        {
            out.println("id :" + stu.get_id() +
                    "\t name: " + stu.get_name());
        }
        // *******************************************************
        Student Noone = Student.valueOf("NoOne");
        // error: id 为 final 型,不能改
        // Noone.id = 12;
        Noone.name = "wula";
        Noone.score = 98;
        out.println(Noone.id + "\t" + Noone.name  + "\t" +  Noone.score);
    }
}
id :1802011 name: Mick
id :1802012 name: Fry
id :1802013 name: None
id :-1 name: Bender is GREAT!
------------------------
id :1802011 name: Mick
id :1802012 name: Fry
id :1802013 name: None
id :-1 name: Bender is GREAT!
id :-1 name: None
-1 wula 98.0
  • 枚举类成员须在 枚举类 开头,以,隔开;
  • 构造方法默认为 final, public, static

2.示例02

import static java.lang.System.out;

interface get_info{
    public int get_id();
    public String get_name();
}
public class Test02 {
    enum Student  implements get_info{
        Bender(){
            public String get_name(){
                return "Bender";
            }
            public int get_id(){
                return 1802011;
            }
        },
        Fry(){
            public String get_name(){
                return "Fry";
            }
            public int get_id(){
                return 1802012;
            }
        },
        Leela(){
          public String get_name(){
              return "Leela";
          }
          public int get_id(){
              return 1802015;
          }
        }
    }
    public static void main(String[] args){
        String[] names = {"Bender", "Fry", "Leela"};
        /* =========================================================
         * 第一种遍历、获取相应对象方法
         *  ---------Contents.valueOf(String cont)--------------
         * : 返回字符串对应的 枚举类对象
         * ============================================================ */
        for(String name:names)
        {
            Student stu = Student.valueOf(name);
            out.println("id :" + stu.get_id() +
                    "\t name: " + stu.get_name());
        }
        out.println("---".repeat(8));
        /* =========================================================
         * 第二种遍历、获取相应对象方法
         *  ---------Contents.values()--------------
         * : 返回枚举类对象 列表
         * ============================================================ */
        for(Student stu: Student.values())
        {
            out.println("id :" + stu.get_id() +
                    "\t name: " + stu.get_name());
        }
    }
}
id :1802011 name: Bender
id :1802012 name: Fry
id :1802015 name: Leela
------------------------
id :1802011 name: Bender
id :1802012 name: Fry
id :1802015 name: Leela
  • 枚举类可使用接口+匿名类,实现成员初始化,以及get()方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Protobuf是一种高效的序列化协议,可以用于数据交换和数据存储。它的主要优势是大小小,速度快,可扩展性强。下面是使用Protobuf的一些小记: 1. 定义消息格式 首先,需要定义消息格式,以便Protobuf可以将数据序列化和反序列化。消息格式定义在.proto文件中,使用protobuf语言编写。例如,下面是一个简单的消息格式定义: ``` syntax = "proto3"; message Person { string name = 1; int32 age = 2; } ``` 这个消息格式定义了一个名为Person的消息,包含两个字段:name和age。 2. 生成代码 一旦消息格式定义好,就可以使用Protobuf编译器生成代码。编译器将根据消息格式定义生成相应的代码,包括消息类、序列化和反序列化方法等。可以使用以下命令生成代码: ``` protoc --java_out=. message.proto ``` 这将生成一个名为message.pb.javaJava类,该类包含Person消息的定义以及相关方法。 3. 序列化和反序列化 一旦生成了代码,就可以使用Protobuf序列化和反序列化数据。例如,下面是一个示例代码,将一个Person对象序列化为字节数组,并将其反序列化为另一个Person对象: ``` Person person = Person.newBuilder() .setName("Alice") .setAge(25) .build(); byte[] bytes = person.toByteArray(); Person deserializedPerson = Person.parseFrom(bytes); ``` 这个示例代码创建了一个Person对象,将其序列化为字节数组,然后将其反序列化为另一个Person对象。在这个过程中,Protobuf使用生成的代码执行序列化和反序列化操作。 以上是使用Protobuf的一些基本步骤和注意事项,希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定谔的壳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值