java枚举:初学(1)

Java基础之Java枚举 絮叨 昨天刚好有遇到一个枚举的小问题,然后发现自己并不是那么熟悉它,然后在开发中,枚举用的特别多,所以有了今天的文章。 什么是枚举 Java中的枚举是一种类型,顾名思义:就是一个一个列举出来。所以它一般都是表示一个有限的集合类型,它是一种类型,在维基百科中给出的定义是: 在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠.。枚举是一个被命名的整型常数的集合,枚举在日常生活中很常见,例如表示星期的SUNDAY、MO 阅读详情
package qian.com;

import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;

interface Generator<T>{
    public T next();
}

enum Year{ SPRING,SUMMER,AUTUMN,WINTER}

enum Direction implements Generator<Direction>{
    EAST("i am east"),
    WEST("i am west"),
    NORTH("i am north"),
    //这个分号不能省略;

    private String descript;
    //因为我们只能在Year这个枚举类的内部创建其对象,
    //所以将其声明为私有的;
    private Direction(String descript){
        this.descript = descript;
    }

    public String getDescript(){
        return descript;
    }
    //和别的类一样,我们也可以覆盖toString()方法
    public String toString(){
        String name = this.name();
        return name.charAt(0)+name.substring(1).toLowerCase();
    }

    @Override
    public Direction next() {
        return Direction.values()[new Random().nextInt(Direction.values().length)];
    }

}

public class EnumTest {
    public static void method1(){
        /*展示enum定义的类中都有哪些方法,发现其除了
         *有object中的方法外
         * 还有如下方法;
         * 
         * */
        for(Year y:Year.values()){
            System.out.println("----Enum method()----");
            System.out.println("y.compareTo(Year.WINTER):   "+y.compareTo(Year.WINTER));
            System.out.println("y.equals(Year.WINTER):   "+y.equals(Year.WINTER));
            System.out.println("y.hashCode():   "+y.hashCode());
            System.out.println("y.name():   "+y.name());
            System.out.println("y.ordinal():   "+y.ordinal());
            System.out.println("y.toString():   "+y.toString());
            System.out.println("y.getClass():   "+y.getClass());
            System.out.println("----Year method()----");
            System.out.println("y.valueOf(WINTER):   "+y.valueOf("WINTER"));
            System.out.println("y.values().length:  "+y.values().length);

            System.out.println("---------------------");
        }
    }
    public static void method2(){
        for(Direction d:Direction.values()){
            System.out.println(d.toString()+" : "+d.getDescript());         
        }
    }
    public static void method3(){
        //方法三 来展示枚举类的 switch方法;
        //一般来说switch方法中只能使用整数值,而枚举实例
        //天生就具备整数值的次序;并且我们也可以
        //通过ordinal()方法来获取其次序,
        Year[] ys = Year.values();
        Random rand = new Random();
        String randName = ys[rand.nextInt(ys.length)].name();
        switch(randName){
            case "SPRING" :{
                System.out.println("randName is spring");
                break;
            }
            case "SUMMER" :{
                System.out.println("randName is summer");
                break;
            }
            case "AUTUMN" :{
                System.out.println("randName is autumn");
                break;
            }
            case "WINTER" :{
                System.out.println("randName is winter");
                break;
            }
            default:{
                System.out.println(" it is wrong");
            }
        }
    }
    public static void method4(){
        //详细讲解values()方法;
        //我们知道编译器为我们创建的enum类都自动继承与Enum类
        //但是我们发现Enum类中并没有values方法;

        class Reflection{
            public Set<String> analyse(Class<?> enumClass){
                /*for(Type t:enumClass.getGenericInterfaces()){
                    System.out.println(t);
                }*/
                Set<String> methods = new TreeSet<String>();
                for(Method m:enumClass.getMethods()){
                    methods.add(m.getName());
                }
                System.out.println(enumClass.getSimpleName()+":");
                System.out.println(methods);
                return methods;
            }
        }

        Set<String> yearMethods = new Reflection().analyse(Year.class);
        Set<String> enumMethods = new Reflection().analyse(Enum.class);

        System.out.println(yearMethods.containsAll(enumMethods));
        /*从输出结果可以看出,
        1,Enum类中没有values()方法;
        2.Enum类中的valueOf()需要两个参数而Year类中只需要一个参数
        可以见得是编译器在编译时候给你 Year类添加了这两个方法,
        那么就会存在一个问题,就是enum修饰的枚举类再向上转型
        成Enum时,其中的values()方法就会没有了,这怎么解决:
        用到反射Class类中的getEnumConstants()方法可以得到Year
        中的所有实例;*/

        Enum[] es = Year.SPRING.getClass().getEnumConstants();
        for(Enum ee:es)
            System.out.println(ee); 
    }

    public static void method5(){
        /*我们知道java是单继承的 既然每一个enum都继承与Enum,
        那么它就不能继承别的类了怎么办;
        那就实现多个接口呗
        比如我们让上面的Direction枚举类实现生成器接口;*/

        //1.必须要拿到一个enum实例,才可以调用其内部的方法;
        Direction dir = Direction.EAST;
        for(int i=0;i<5;i++)
            System.out.print(dir.next().name()+" ");
        System.out.println();
        for(int i=0;i<5;i++)
            System.out.print(RandEnumTools.random(Year.class)+" ");
    }



    public static void main(String [] args) {
        //method1();
        method5();
    }
}

//插曲:由方法5我们可以看到,我们经常需要随机生成一个枚举实例:
//那么直接用反射做个工具类包:
class RandEnumTools{
    private static Random rand = new Random();
    public static <T extends Enum<T>> T random(Class<T> ec){
        return random(ec.getEnumConstants());
    }
    public static <T> T random(T[] values){
        return values[rand.nextInt(values.length)];
    }
}








这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

第14.1章 高翔博士2025年11月最新开源框架Lightning-LM源码学习解读(一):激光-IMU定位+建图算法各模块简介 Lightning-LM:高效激光SLAM定位系统 该框架基于模块化设计,通过激光-IMU融合实现快速建图与定位,核心特点包括: 极速性能:纯CPU运行(建图1.2核/定位0.8核) 模块化架构:包含激光里程计(LIO)、地图管理、回环检测等独立模块 动态场景支持:地图分块加载、动静态图层分离 多模式适配:支持ROS2环境下的在线/离线运行 关键模块包括前端里程计(core/lio)、2D/3D地图转换(core/g2p5)、轻量优化库(core/miao)等,通过系统控制器(core/system)协调流 阅读详情

相关推荐

机器学习-深嵌交叉验证(Nested Cross-Validation)

Section I: Code and Analyses 第一部分:代码 from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC from...

Santorinisu Blogs 2714

java基础--枚举

代码】java基础--枚举。

qq_28409161的博客 279

IDEA 2023.2最新破解安装教程(含详细配置步骤及常见问题解决)

本文详细介绍了IDEA 2023.2的安装流程及高效开发环境搭建指南,涵盖基础配置、项目结构优化、核心功能使用、插件推荐、性能优化等全方位内容,帮助开发者快速掌握这一强大的Java开发工具。

x2y3z4a5b的博客 1746

枚举类中随机获取枚举

/** * @author 徐小骥 * @version :2016-8-17 下午03:23:39 */ import java.util.Random; public class Enums { private static int random=(int)(Math.random()*10);// 生成种子 private stati

徐小骥的博客 1万+

OLED的字模提取(保姆级)---基于PCtoLCD2013

做为一个刚刚开始接触编程不久的白菜,这个OLED想做一个信息显示,可是商家给我的例程里就是88,816两种字体的格式,我的屏幕是0.91寸的8*16的字体显示上感觉特别丢丢儿小,我就想整个大的,哎,只怪直接学习习惯不好,总是学一半,绕了好大一圈,才搞好,想写一篇博客,时刻提醒踏实学习,第一次写博客,小白一枚,勿喷。。 OLED屏幕驱动程序功能 我们对Markdown编辑器进行了一些功能拓展与语法支...

qq_44886611的博客 7781

C#与西门子PLC S7-1500 S7协议PLC读写数据

/获取对应长度的字符串。//将val字符串转换为字符数组。//String写入。//String读取。//PLC类型 IP地址 机架号 槽号。1.类库使用S7netplus。

softshow1026的博客 5576

[Java性能剖析]JVM Management API

       JVM本身提供了一组管理的API,通过该API,我们可以获取得到JVM内部主要运行信息,包括内存各代的数据、JVM当前所有线程及其栈相关信息等等。各种JDK自带的剖析工具,包括jps、jstack、jinfo、jstat、jmap、jconsole等,都是基于此API开发的。本篇对这部分内容进行一个详细的说明。        参考:http://java.sun.com/javas...

potato123的博客 365

计量经济学tempdisagg的python库:年度时序变月度

计量经济学tempdisagg的python库:年度时序变月度

素质云笔记 1526

Java Memory Management及垃圾回收机制

1.JVM Memory Java运行时数据区 Java虚拟机在Java程序运行过程中会把它管理的内存,划分为若干个不同的数据区域。 这些区域各自的用途,以及创建和销毁的时间,有的区域随虚拟机的启动而存在,有些区域依赖用户线程的启动和结束而建立和销毁。(比如说栈) 根据《Java虚拟机规范》内存Java虚拟机所管理的内存将会包括如上图的几个运行时数据区。 程序计数器 2.GC 3.内存相关问题 ...

gy99csdn的博客 428

PCB设计必看:铜皮厚度与载流量的黄金比例(附实用对照表)

本文深入探讨了PCB设计中铜皮厚度与载流量的关键关系,提供了实用的对照表和设计技巧。通过分析基础原理、标准选择策略及常见误区,帮助工程师优化PCB设计,确保电路板的可靠性和安全性。特别适用于需要处理大电流或高频应用的电子设计场景。

milk8的博客 510

Bash Shell 系统巡检脚本

部分安全相关检查需要root权限,建议通过sudo运行完整检查。

老韩的Linux云计算架构师进阶之路 94

Java 中的枚举类型(enum)怎么使用???

        学习Java还不久,很多东西还不懂了。        前不从网上下载了一些Java视频教程来看,感觉还不错。照着上面的自己弄了下,一直都好好的,没出过什么问题。可是今天遇到一件非常头痛的事情是:我的MyEclipse7.1不支持枚举类型的数据。以前也学过点C,C++,在这些语言中也用过枚举类型,可是到Java中怎么就不行了呢。后来我上网查了下,答案真是多种多样。有的说Java不

lfkabc的专栏 1784

EXCEL VBA从入门到精通 前言

本书通过丰富的实例和案例,帮助读者更好地理解和应用Excel VBA编程,同时也介绍了常用的工具、资源、社区和协作平台等,方便读者进行进一步的学习和开发。我强烈推荐这本书给所有希望学习和掌握Excel VBA编程的读者。多样化的资源和工具介绍:本书介绍了丰富的工具和资源,包括官方文档、在线教程、代码库、论坛、博客等,方便读者进行进一步的学习和开发。详细的讲解和丰富的示例:本书从语法和对象开始讲解,通过丰富的实例和案例,帮助读者更好地理解和应用Excel VBA编程。第一节:什么是VBA 5。

1723

LeetCode_数位枚举_困难_233.数字 1 的个数

给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。

代码星辰的博客 363

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

165.-枚举-定义格式__

package com.itheima.demo1; public enum Season { SPRING,SUMMER,AUTUM,WINTER; }

qq_31426093的博客 63

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java 1.5 下载地址_jdk1.5下载

jdk1.5是编程软件,也是非常常用java程序编程工具,这款1.5版也是针对多种环境设置的编程开发产品,使用比较广泛,如果你是再学习java编程的话,那么这款软件绝对是首选学习软件,需要的朋友可以来当易网下载使用哦!java jdk1.5介绍:JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广...

weixin_34441120的博客 1142

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java学习笔记——Java基础

Java基础笔记——A 简介: Java是一门强类型的面向对象编程语言。Java编程语言的风格十分接近C++语言。继承了C++语言面向对象技术的核心,舍弃了容易引起错误的指针,以引用取代;移除了C++中的运算符重载和多重继承特性,用接口取代;增加垃圾回收器功能。在Java SE 1.5版本中引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱特性。太阳微系统对Java语言的解释是:“Java编...

Echo_Wish 567

黑马程序员_Java基础_前期准备02-1

前期准备02-1   一、Java高新技术 ①MyEclipse ❶MyEclipse企业级工作平台(MyEclipse Enterprise Workbench,简称MyEclipse)是对EclipseIDE的扩展,使用它可以在数据库和JavaEE的开发、发布以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,

宣的专栏 755

03 - Java核心类库 — 枚举、注解与反射

目前阶段这块知识点了解即可,但在学习框架非常重要,能更好的理解框架。枚举能更好的管理一组相同的常量,内省是基于反射的基础,按照Java bean的标准延伸出来一套操作的API。 反射和内省,如果不进行框架开发,则很少使用;注解一般使用定义好的,自定义注解用的比较少。 枚举、注解与反射一、枚举1. 简介2. 定义格式2.1 Java1.5版本之前2.2 Java1.5版本之后3. 枚举类的主要方法3.1 归纳3.2 实例4. 实现接口的枚举类实例5. 枚举类的注意事项二、注解1. 简介2. 学习的重点.

weixin_46312449的博客 320

JDK各个版本的新特性jdk1.5-jdk8

JDK各个版本的新特性  对于很多刚接触java语言的初学者来说,要了解一门语言,最好的方式就是要能从基础的版本进行了解,升级的过程,以及升级的新特性,这样才能循序渐进的学好一门语言。今天先为大家介绍一下JDK1.5版本到JDK1.7版本的特性。希望能给予帮助。 JDK1.5新特性: 1.自动装箱与拆箱: 自动装箱的过程:每当需要一种类型的对象时,这种基本类型就自动地封装到与它相同类

tansuozhey的博客 622

Java学习日记14——Lambda表达式以及一些高级语法

Java学习日记14——Lambda表达式(λ表达式) Lambda表达式的基本写法 Java1.8以后才有的。 (参数) -> (结果) //例如: (String s) -> s.length(); x -> x*x; () ->{System.out.println("aaa");} 在Java中的Lambda表达式,大体相当于其他语言的匿名函数或者指针函数。然而在Java中,则可以认为是匿名类的一个实例。至于匿名类,在前面已经简单陈述过了。 ...

Andy24.的博客 1079

java发展史

Java是由Sun Microsystems公司(简称Sun公司)于1995 年 5 月推出的 Java程序设计语言和Java平台的总称。Java语言是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由当时任职太阳微系统的 詹姆斯 · 高斯林 (James Gosling)等人于1990年代初开发,它最初被命名为Oak(橡树)。 Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 1991年4月,由James Gosling博士领导的绿色计划(Green...

weixin_39412946的博客 5835

蓝桥杯真题--求值(java实现)

代码 package easy; public class 求值 { public static void main(String[] args) { //从1开始枚举 for (int i = 1;true ; i++) { //当num等于100时 输出 if (f(i) == 100 ) { System.out.println(i); break; } } } //求约数 static in..

qq_45954420的博客 732

贪吃蛇

以前写的一个贪吃蛇,比较适合初学者,并且里面用到了JDK1.5的很多新的东西,比如枚举,泛型,增强for循环,静态导入等等,希望能对初学者有一定的帮助. import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;import static java.lang.Math.*;//静态导入/** ...

千里冰封 112

java基础博文目录

一、java概述与环境搭建 1.java概述与环境搭建 1.计算机的组成 1.1 硬件 1.2 软件 1.2.1 软件系统 1.2.2 应用软件 2.程序 3.编程开发 3.1 开发语言:java 3.1.1 java的定义 3.1.2 java的特点 3.2.3 计算机的执行机制 3.1.4 java体系 3.1.5 java应用拓展 3.1.6 java VS c语言 3.2 开发工具 3.3 开发环境 4.java环境搭建 4.1 卸载软件 4.2 安装jdk步骤 4.3 测试jdk是否安装成功 4.

m0_53222768的博客 350

从初学者到专家:Java枚举的完整指南

枚举是一种特殊的数据类型,用于表示一组有限的命名常量。它的优点包括类型安全性、可读性、可维护性和易于扩展,同时还简化了单例模式的实现。枚举常量是唯一的、不可变的,可以在编译时进行检查,减少错误的发生。枚举类型可以具有自定义的方法,提供了一种组织常量和相关行为的方式。枚举还可以支持可迭代和比较操作,方便进行遍历和比较枚举常量。

LHY537200的博客 5342
上一篇: JAVA压缩文件之-ZipOutputStream
下一篇: java枚举:初学(2)
Coder-Qian
博客等级 码龄11年 63粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值