精华内容
下载资源
问答
  • JAVA初始化及使用enum枚举类型

    万次阅读 2018-04-02 21:20:41
    在使用enum之前,需要先创建一个整型常量集,但枚举值并不会取值限定在这个常量集的范围内,因此,具有一定的风险,且较难使用。枚举类型的创建,public enum Spiciness{ NOT,MILD,MEDIUM,HOT,FLAMING }创建枚举类型...

    在使用enum之前,需要先创建一个整型常量集,但枚举值并不会取值限定在这个常量集的范围内,因此,具有一定的风险,且较难使用。


    枚举类型的创建,

    public enum Spiciness{
        NOT,MILD,MEDIUM,HOT,FLAMING
    }

    创建枚举类型时编译器会自动添加一些特性,如会自动创建toString()方法,以便你可以很方便的显示某个enum实例的名字,除此之外,还会创建ordinal()方法,用于表示某个特定enum常量的声明顺序;还有static values()方法,按照enum常量的声明,产生由这些常量构成的数组:


    实例如下:

    public class SimpleEnumUse {
    public enum Spiciness{
    	NOT,MILD,MEDIUM,HOT,FLAMING
    }
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Spiciness hotHot= Spiciness.MEDIUM;
    		System.out.println(hotHot);
    		for(Spiciness s:Spiciness.values())          //value()方法用来产生顺序数组
    			System.out.println(s+",ordinal "+s.ordinal());//ordinal()方法用来声明顺序
    	}
    }
    /* Output:
    NOT,ordinal 0
    MILD,ordinal 1
    MEDIUM,ordinal 2
    HOT,ordinal 3
    */

    由此可见,可以把enum当作其他类来处理。事实上enum确实是类,而且可以用有限的可能值集合配合switch使用。

    如下,

    import thinkinginjava5_.SimpleEnumUse.Spiciness;
    class Burrito{
    	Spiciness degree;
    	public Burrito(Spiciness degree) {
    		// TODO Auto-generated constructor stub
    		this.degree=degree;
    	}
    	public void describe(){
    		System.out.print("This burrito is ");
    		switch(degree){
    		case NOT:System.out.println("not spicy at all.");
    			break;
    		case MILD:
    		case MEDIUM:System.out.println("a little hot");
    		break;
    		case HOT:
    		case FLAMING:System.out.println("maybe too hot");
    		break;
    		}
    	}
    }
    public class SimpleEnumUse {
    public enum Spiciness{
    	NOT,MILD,MEDIUM,HOT,FLAMING
    }
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub		
    		Burrito plain=new Burrito(Spiciness.NOT),
    		greenChile=new Burrito(Spiciness.MEDIUM),
    		jalapeno=new Burrito(Spiciness.HOT);
    		plain.describe();
    		greenChile.describe();
    		jalapeno.describe();
    		
    	}
    }
    /*Output 
    This burrito is not spicy at all.
    This burrito is a little hot
    This burrito is maybe too hot
     */



    展开全文
  • 主要介绍了java枚举类的构造函数实例详解的相关资料,需要的朋友可以参考下
  • 今天写枚举类的时候发现了一个有趣的现象,在这里分享一下: 首先我们定义一个简单的枚举类: /** * @author jinghuaixin * @date 2020/04/30 */ public enum Week { Monday, Tuesday; // 静态代码块 static ...

    今天写枚举类的时候发现了一个有趣的现象,在这里分享一下:

    首先我们定义一个简单的枚举类:

    /**
     * @author jinghuaixin
     * @date 2020/04/30
     */
    public enum Week {
    
        Monday, Tuesday;
        // 静态代码块
        static {
            System.out.println("枚举中静态代码块执行了");
        }
    
        // 构造方法
        private Week() {
            System.out.println("枚举中构造方法执行了");
        }
    
        // 构造代码块
        {
            System.out.println("枚举中代码块执行了");
        }
    }
    

    然后定义一个简单的测试类:

    public class TestEnum {
    
        static {
            System.out.println("普通类中静态代码块执行了");
        }
        {
            System.out.println("普通类中代码块执行了");
        }
    
        public TestEnum() {
            System.out.println("普通类的构造方法执行了");
        }
    
        public static void main(String[] args) {
            new TestEnum();
            System.out.println("+++++++++++++++++++++++++++");
            new TestEnum();
            System.out.println("=========================");
            Week week = Week.Monday;
            System.out.println("=========================");
            Week week2 = Week.Tuesday;
        }
    
    }
    

    运行结果:

    普通类中静态代码块执行了
    普通类中代码块执行了
    普通类的构造方法执行了
    +++++++++++++++++++++++++++
    普通类中代码块执行了
    普通类的构造方法执行了
    =========================
    枚举中代码块执行了
    枚举中构造方法执行了
    枚举中代码块执行了
    枚举中构造方法执行了
    枚举中静态代码块执行了
    =========================
    

    普通类中,静态代码块在类加载的时候执行,类只会加载一次,所以只会执行一次,并且这个动作在对象实例化之前,所以是最先输出的,紧接着每次实例化都会去调用构造代码块和构造方法,所以会2次输出。但是枚举类就比较有趣了,可以看到枚举类中第一次使用的时候,调用构造代码块和构造方法块执行次数和枚举元素相等,第二次并没有再调用构造代码块和构造方法,静态代码块虽然也只执行了一次,但是却放在最后了,这是为什么呢?

    我们借助jad反编译一下枚举类的代码:

    jad Week.class
    

    反编译生成的代码:

    // Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
    // Jad home page: http://www.kpdus.com/jad.html
    // Decompiler options: packimports(3) 
    // Source File Name:   Week.java
    
    package learnbymaven.single;
    
    import java.io.PrintStream;
    
    public final class Week extends Enum
    {
    
        private Week(String s, int i)
        {
            super(s, i);
            System.out.println("枚举中代码块执行了");
            System.out.println("枚举中构造方法执行了");
        }
    
        public static Week[] values()
        {
            Week aweek[];
            int i;
            Week aweek1[];
            System.arraycopy(aweek = ENUM$VALUES, 0, aweek1 = new Week[i = aweek.length], 0, i);
            return aweek1;
        }
    
        public static Week valueOf(String s)
        {
            return (Week)Enum.valueOf(learnbymaven/single/Week, s);
        }
    
        public static final Week Monday;
        public static final Week Tuesday;
        private static final Week ENUM$VALUES[];
    	
    	// 静态代码块初始化变量
        static 
        {
            Monday = new Week("Monday", 0);
            Tuesday = new Week("Tuesday", 1);
            ENUM$VALUES = (new Week[] {
                Monday, Tuesday
            });
            System.out.println("枚举中静态代码块执行了");
        }
    }
    
    

    通过反编译代码可以看到,枚举底层其实还是class,枚举元素是被声明成public static final的成员变量(可以通过类名直接调用),并且在static静态代码块中一起初始化了,这就解释了为什么第一次调用枚举类的时候,构造代码块和构造方法执行次数会和枚举元素相等,因为第一次加载类的时候就全部初始化了。由于java类的加载和初始化过程都是线程安全的,所以创建一个enum类型是线程安全的

    展开全文
  • public enum AAA { S111,SBBB,SCCC; private AAA() { System.out.println("123"); } } public class TestMain { public static void main(String [] args) { ...three 123
  • 枚举初始化

    千次阅读 2018-07-22 15:16:13
    知识点:枚举类 所有的枚举值都是类静态常量,在初始化时会对所有的枚举值对象进行第一次初始化。 package zml; enum AccountType { SAVING, FIXED, CURRENT; private AccountType() { System.out.println(&...

    知识点:枚举类 所有的枚举值都是类静态常量,在初始化时会对所有的枚举值对象进行第一次初始化。

    package zml;
    enum AccountType
    {
        SAVING, FIXED, CURRENT;
        private AccountType()
        {
            System.out.println("It is a account type");
        }
    }
    
     
    public class TestEnum {
         public static void main(String[]args)
            {
                System.out.println(AccountType.FIXED);
                System.out.println("=================");
                System.out.println(AccountType.FIXED);
            }
    }
    
    

    结果:

    展开全文
  • java枚举类型初始

    千次阅读 2015-08-27 11:50:12
     个人的理解是,枚举就相当于是程序员自己定义的一组变量集合,当需要使用这些变量时,你只能在这个定义好的变量集合中取。 2、作用:  (1)限定取值范围,所有的内容只能从指定的范围中取得;  (2)...
     
    
    1、含义:
         个人的理解是,枚举就相当于是程序员自己定义的一组变量集合,当需要使用这些变量时,你只能在这个定义好的变量集合中取。

    2、作用:
         (1)限定取值范围,所有的内容只能从指定的范围中取得;
         (2)枚举还以按索引走,枚举的查找、比较、遍历都较为方便
         (3)枚举 限定了取值范围,因此它的数据安全相对较高一些。
         (4)枚举定义的类相对比较明了、实用。

    3、用法:

    (1)定义:
         public  enum  State
              {
                      SUCCESS ,  RETRY ,  ERROR ,  CRITICAL ,  BLOCKED
              }

     (2)调用:State state= State.SUCCESS;

     (3)用法总结:
         定义枚举类,本质上也是一个普通的java类,它也可以声明构造函数(但是只能是私有或者包级私有)、成员变量和成员方法,还能实现接口,值得注意的是,成员变量和成员方                      法的声明必须放在所有枚举值定义的后面。 enum定义时,定义出来的类型是默认继承java.lang.Enum类,并非Object类,它默认实现了java.lang.Comparable和 java.io.Serializable接口。所有的枚举类型都是final类,它没有子类。枚举值都是public static final,枚举值是常量,故通常应该大写。
    (4)常用的方法:  int compareTo方法

                                     String name():返回枚举实例的名称

                       int ordinal() 返回枚举值在枚举中的索引

                       String toString()返回枚举的实例名称 比name更常用

                         valueOf()
                       values()
         用法如下:
         public class EnumTest {
              public static void main(String[] args){
                   State sta =State.SUCCESS;
                   System.out.println(sta );//FRI
                   System.out.println(sta.name());//FRI
                   System.out.println(sta .ordinal());//4
              System.out.println(State.valueOf("SUN").toLocaleString());//星期日
                   System.out.println(sta.values().length);//7  获取枚举长度
              }
         }
    遍历:
         for(State st:State.values()){
                   System.out.println( st   );           }
     (5)枚举的构造函数:
         public enum Gender {
              MALE("男"),FEMALE("女");
              private String name;
              private Gender(String name){
              this.name =name;
        }
        public String getName(){
            return this.name;
        }

    (6)适用范围:
    1. 包中、类中,不能在方法中;
    2. 使用场合:从另一个函数得到一个值,但是这个值只能够在一个范围内,实用枚举可以限制这个函数传递进来的值。
    3. 当考虑在类中要指定选项必须为某些类型时。

    (7)注意事项
         枚举也像普通的类一样可以添加属性和方法,可以是静态的,也可以是非静态的
         注意:枚举定义时,必须写类体在最前面,否则会编译出错。
    展开全文
  • java 枚举内嵌枚举 假设我们有以下代码: enum Case { CASE_ONE, CASE_TWO, CASE_THREE; private static final int counter; private int valueDependsOnCounter; static { int sum = 0; for(int i = ...
  • Java 枚举Enum理解

    2019-04-24 17:32:20
    1.楔子 枚举能继承别枚举吗?...由于该工具最新的版本也只支持Java 4,不支持Java 5,所以能够很好的保留jdk5之后的例如枚举等原生的编译结果。 jad的使用教程:Java反编译工具Jad详解 JD-GUI反编...
  • 深入理解Java枚举类型(enum)

    万次阅读 多人点赞 2017-05-13 18:27:14
    【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) ... 出自【zejian的博客】 关联文章: 深入理解Java类型信息...深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解
  • Java枚举详解

    万次阅读 多人点赞 2019-05-12 23:07:44
    枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。枚举在曰常生活中很常见,例如一个人的性别只能是“男...而使用 Java 枚举类型 enum 可以更贴近地表示这种常量。 声明枚举 声明枚举时必须使用 enu...
  • 类的初始化和对象初始化是JVM管理的类型生命周期中非常重要的两个环节,Google了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和JVM层次来分析的文章更是鲜有所见...
  • Java 枚举(enum) 详解7种常见的用法

    万次阅读 多人点赞 2016-08-11 11:14:45
    JDK1.5引入了新的类型——枚举。在Java中它虽然算个“小”功能,却给我的开发带来了“大”方便。 大师兄我【大师兄】又加上自己的理解,来帮助各位理解一下。 用法一:常量 在JDK1.5之前,我们定义常量都是:...
  • Java中创建枚举并赋初值

    万次阅读 2017-04-18 11:06:50
    枚举在内部其实都是数值,如果只申明枚举而不赋值,是不安全的. public enum TableType { TABLE, VIEW;} 就像上面这样,创建后,并且保存到数据库里.如果后期再添加一个新的,如果添加到了TABLE, VIEW;的中间比如TABLE,...
  • Java 枚举与泛型

    千次阅读 2019-05-18 11:21:13
    Java 枚举 之前写过的文档:https://blog.csdn.net/Roobert_Chao/article/details/78637972
  • java枚举存入map

    千次阅读 2012-06-27 12:05:19
    在jdk1.5中java引入了枚举类型,今天我们就将枚举类型的数据存入到map中,代码如下: public enum IdeasCMD { RESERVED(0), PING(1), PING_ACK(2), KEY_EXCHANGE(3), KEY_EXCHANGE_ACK(4), CONNECT(5), CONNECT_...
  • JAVA枚举操作(获取值,转map集合)

    千次阅读 2019-05-15 18:24:24
    JAVA枚举相对来说比.NET的枚举功能强大,感觉就像是一种简化版的类对象,可以有构造方法,可以重载,可以继承接口等等,但不能继承类,JAVA枚举在实际开发中应用相当频繁,以下几个封装方法在实际开发中可能用到,...
  • java枚举类型及枚举集合

    千次阅读 2020-04-15 15:29:28
    文章目录一、枚举类型二、switch 操作三、自定义枚举类四、相关枚举类4.1 EnumMap 枚举型映射/字典 一、枚举类型 /** * @author zhangys * @description * @date 2020/4/15 */ public class EnumTest { enum ...
  • 在看http_errno展开的时候,发现由HTTP_ERRNO_GEN通过HTTP_ERRNO_MAP的生成的枚举"XX_UNKNOWN,"多一个逗号,而编译器并不报错,而是接受它了。这明明是一个语法错误么! int a[] = {1, 2, 3, }; enum b ...
  • Java基础知识面试题(2020最新版)

    万次阅读 多人点赞 2020-02-19 12:11:27
    文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的...
  • JAVA枚举类型(Enum)的使用

    万次阅读 多人点赞 2018-09-02 11:02:33
    在现实社会中,有些类的实例对象是固定的...这个时候就体现出枚举类的作用了,java枚举类型就是针对这样的场景需求所设计的。 /** * 枚举类的后缀建议为Enum,枚举类型的实例对象建议全大写(这样做符合JAVA的...
  • 利用Java枚举实现简单的状态机

    千次阅读 2019-04-19 21:13:55
    利用Java枚举实现状态机的想法比较新颖,在某些场景下用处也很大,看了一篇文章不错翻译在此。 --------------------------------------------------------------------------------------------------------------...
  • java 枚举转实体List

    2018-11-08 09:58:00
    public class EnumBean implements Serializable { private static final long serialVersionUID = 1L;... private static final String ENUM_CLASS = "java.lang.Enum"; private int id; privat...
  • java 枚举 参数传递

    千次阅读 2020-01-21 17:10:22
    具体问题是这样的,JAVA定义一个枚举(如 RED、BLUE、GREEN)对象,初始值为RED,作为一个方法的参数传入,在方法中对该枚举对象进行修改(修改为BLUE),在调用该方法后,该对象还是为RED,如何使方法对对象的修改...
  • Java枚举类,你真的了解吗?

    千次阅读 多人点赞 2019-05-17 10:59:21
    枚举类可能在初学者的知识储备中比较陌生,但实际开发中,枚举类又不可或缺。枚举类能够统一管理一些全局的变量,封装对于他们的逻辑与方法。还能和switch-case结合,简化大量的if-else,让代码更加优雅。 本文将从...
  • java中变量未初始化

    千次阅读 2015-05-22 18:53:26
    java中的变量未初始化,会出现什么问题呢,如果是基本数据类型,则会有初始值,如果不是,则一般是null,以下为测试结果 public class Test { String str; int a; char b; short s; float f; long lo; ...
  •  然后是成员初始化,这个部分在类的构造函数前初始化,因为编译器(或者设计者)可能认为构造函数调用了这个成员变量,所以在其前初始化了。或者说是成员自己有自己的能力来初始化自己,不用构造函数来管,这部分属于...
  • Java 枚举类和自定义枚举类和enum声明及实现接口1.枚举类1.枚举类的属性2.自定义枚举类2.Enum枚举类3.实现接口的枚举类 1.枚举类 注: JDK1.5之前需要自定义枚举类 JDK 1.5 新增的 enum 关键字用于定义枚举类 ...
  • java枚举类的定义和使用

    万次阅读 热门讨论 2018-08-11 12:28:24
    开始时间 2018年8月11日11:04:35  结束时间 2018年8月11日12:30:37  累计+1小时 枚举类的对象是有限个 对象个数 一个可以看做单例模式的实现...要在构造器中初始化,不允许被修改、 3 通过公共方法 调用属性...
  • java基础篇(11) 枚举类型

    万次阅读 2019-05-02 08:33:00
    枚举类型Enum的简介 1.什么是枚举类型 枚举类型: 就是由一组具有名的值的有限集合组成新的类型。(即新的类)。 好像还是不懂,别急,咱们先来看一下 为什么要引入枚举类型 在没有引入枚举类型前,当我们想要维护一组...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 91,681
精华内容 36,672
关键字:

java枚举初始化

java 订阅