精华内容
下载资源
问答
  • 实验报告课程名称: Java 程序设计 成绩评定: 指导教师: 实验项目名称:接口、泛型、枚举、内部类与异常 学生姓名: 学号: 专业班级: 实验地点: 实验时间: 实验项目......Java语言提供了一种称为枚举的类型 定义方法....

    实验报告课程名称: Java 程序设计 成绩评定: 指导教师: 实验项目名称:接口、泛型、枚举、内部类与异常 学生姓名: 学号: 专业班级: 实验地点: 实验时间: 实验项目......

    Java语言提供了一种称为枚举的类型 定义方法. 1 声明枚举类 public enum Grade { A, B, C, D, E }; 它包括一个关键字enum,一个新枚举类型的名 字 ......

    } } public static void main(String[] args) { System.out.println(Color.RED.toString()); } } 用法五:实现接口 所有的枚举都继承自 java.lang.Enum 类......

    5.2.2 可变字符串:StringBuffer 5.2.3 String与StringBuffer异同 5.3、字符串与其他数据类型的转换 5.4、枚举 Java程序设计 3 5.1.1、一维数组 Java ......

    输出 300 B.输出 0 C.编译错误 * D.编译成功,运行时错误 批注 [U2]: 这里只能放 long 型以下 的数据类型(char、byte、int、short) 批注 [U3R2]: 枚举......

    Java实战 Java基础 Java课堂出品 目录 1 contents 2 我们要枚做举什么 包装类型 枚举枚举类型是Java提供的一种特殊数据类型。枚举类型声明通过列举(枚举)处变量所有......

    整型和单精度浮点型 下列是 Java 语言中的复合数据类型,其中错误的是___C___ A.数组 B.接口 C.枚举 D.类 下面是关于 Java 语言中数据类型的强制转换的描述......

    整型和单精度浮点型 下列是 Java 语言中的复合数据类型,其中错误的是___C___ A.数组 B.接口 C.枚举 D.类 下面是关于 Java 语言中数据类型的强制转换的描述......

    (选两项) A.使用 for 循环 B.使用迭代器 Iterator C.使用枚举器 Enumeration D.使用增强型 for 循环 26.现有: public class Parent{ public void change (......

    A. 枚举中定义的每一个枚举项其类型都是 String; B. 在 Java 中可以直接继承 java.util.Enum 类实现枚举类的定义; C. 利用枚举类 ......

    // 实例化对象 } public class JavaDemo { public static void main(String args[]) { Color c = Color.RED; switch (c) { // 支持枚举判断 case RED:......

    要求字符 串必须是枚举类对象的“名字”。如不是,会有运行时异常: IllegalArgumentException。 10.1.5 实现接口的枚举类和普通 Java 类一样,枚举类可以实现一个......

    (3)如果要在程序中使用键盘输入语句,则需要预先导入___java.util.Scanner___包。 (4)在 switch 语句中,case 的值必须是___byte int char short 枚举___包......

    Java面向对象程序设计(基本类型、数组和枚举类型)_计算机软件及应用_IT/计算机_专业资料。《Java面向对象程序设计》第2章 基本类型、数组和枚举类型 导读主要内容 ?...

    Servlet可以与其它服务器资源(包括数据库和基于Java的应用程序)进行通信...

    4、 ( F )在 Java 语言中,系统常量 null,false,true 既可以大写,也可以小写。 5、 ( T )Java 语言没有无符号整数类型、指针类型、结构类型、枚举类型、......

    (选两项) A.使用 for 循环 B.使用迭代器 Iterator C.使用枚举器 Enumeration D.使用增强型 for 循环 26.现有: public class Parent{ public void change (......

    尽量使用 Java 5.0 新循环写法 B. 判断一个变量是否等于 null、或...

    long D. 枚举类型 16. 和下面代码执行结束后,sum 结果一致的选项是...

    尽量使用 Java 5.0 新循环写法 B. 判断一个变量是否等于 null、或...

    展开全文
  • 在学习枚举构造函数之前,请确保了解Java枚举。在Java中,枚举类可能包含类似于常规类的构造函数。这些枚举构造函数是private-在类内可以访问或package-private -可在包内访问示例:枚举构造函数enumSize{//枚举常量...

    Java 枚举构造函数

    在本Java教程中,您可以在一个有效的示例的帮助下了解枚举构造函数。

    在学习枚举构造函数之前,请确保了解Java枚举。

    在Java中,枚举类可能包含类似于常规类的构造函数。这些枚举构造函数是private-在类内可以访问

    package-private -可在包内访问

    示例:枚举构造函数enum Size {

    //枚举常量,调用枚举构造函数

    SMALL("尺寸很小。"),

    MEDIUM("尺寸中等。"),

    LARGE("尺寸很大。"),

    EXTRALARGE("尺寸超大。");

    private final String pizzaSize;

    //私有枚举构造函数

    private Size(String pizzaSize) {

    this.pizzaSize = pizzaSize;

    }

    public String getSize() {

    return pizzaSize;

    }

    }

    class Main {

    public static void main(String[] args) {

    Size size = Size.SMALL;

    System.out.println(size.getSize());

    }

    }

    输出结果尺寸很小。

    在上面的示例中,我们创建了一个enum Size。它包含一个private枚举构造函数。构造函数将字符串值作为参数,并将值分配给变量pizzaSize。

    由于构造函数是private,我们无法从类外部访问它。但是,我们可以使用枚举常量来调用构造函数。

    在Main类中,我们将SMALL分配给枚举变量size。 然后,常量SMALL以字符串为参数调用构造函数Size。

    最后,我们使用size调用getSize()。

    展开全文
  • Java枚举枚举类概念的理解与定义一个类的对象是有限个,确定的,我们称此为枚举类。当需要定义和维护一组常量时,强烈建议使用枚举类。如果一个枚举类中只有一个对象,则可以作为单例模式的实现方式。通俗的说:一个...

    Java枚举

    枚举类概念的理解与定义

    一个类的对象是有限个,确定的,我们称此为枚举类。

    当需要定义和维护一组常量时,强烈建议使用枚举类。

    如果一个枚举类中只有一个对象,则可以作为单例模式的实现方式。

    通俗的说:一个类被设计为包含固定实例数量的特殊类,我们给他的定义是枚举类。

    注意:

    1.枚举类不能被 new 出来,枚举类因为默认的类修饰符为 final 所以也不能被派生(继承),同理枚举类也不能为当作实现。

    2.枚举类自身可以实现接口,既可以进行统一实现重写接口抽象方法,也可以按照枚举类型单个实现重写。

    枚举类的定义

    关于枚举类的定义,这块主要想和大家分享两种方式

    jdk 5.0之前,自定义枚举类方式

    jdk 5.0之后,Enum关键字方式定义

    实践

    一、准备工作

    我们新建一个 Java Project ,并创建一个包,以及一个测试类

    51025526c84558527b7dea059c62a9ee.png

    二、自定义枚举的三种方式(jdk 5.0 之前)

    1. 定义一个抽象类,在抽象类中定义常量进行维护,我们接下来以 Java 类库中的 Calendar 类示例来进行说明

    新建一个类 EnumDemo01.java 代码如下:

    package org.taoguoguo;

    import java.util.Calendar;

    /**

    * @author taoGG

    * @description jdk 5.0 之前 抽象类枚举方案Demo

    * @create 2020-09-13 14:20

    */

    public class EnumDemo01 {

    public static void main(String[] args) {

    Calendar calendar = Calendar.getInstance();

    System.out.println(calendar.get(1));

    }

    }

    Console 结果输出:

    2020

    Process finished with exit code 0

    如果熟悉 Calendar API 的小伙伴 应该马上能反应过来,这个是获取当前的年份,类似的值还有

    3 - 一年中的第几个星期

    4 - 一年中的第几个月

    5 - 当前的日期

    ......

    但是这么多值,我们怎么能记得住呢?万一我输入错误,随便取了一个范围怎么办?

    没错,这是 jdk 5.0之前的痛点,为了解决实例数量固定,便于维护这些问题,在jdk 5.0之后更新Enum枚举类解决了这个问题。那在jdk 5.0之前官方是怎么做的呢?难道需要我们一个个去记住 Calendar 的数字?

    实际上官方本身,采用的就是我们现在说的第一种方式,在抽象类中定义常量进行维护

    现在我们将代码做些修改:

    package org.taoguoguo;

    import java.util.Calendar;

    /**

    * @author taoGG

    * @description jdk 5.0 之前 抽象类枚举方案Demo

    * @create 2020-09-13 14:20

    */

    public class EnumDemo01 {

    public static void main(String[] args) {

    Calendar calendar = Calendar.getInstance();

    System.out.println(calendar.get(Calendar.YEAR));

    }

    }

    我们运行进行输出:

    2020

    Process finished with exit code 0

    结果与之前一致,这时我们就清楚,在开发过程中作为开发者我们肯定愿意使用 Calendar.YEAR 这种写法,一来方便记忆,二来可读性高。那么官方的做法时怎样的呢?我们点进去源码看一下

    首先 Calendar 本身是一个抽象类,实现了序列化、克隆、以及比较排序接口,这边和我们枚举没有太大关系,我们继续往下看

    e6ff8bc5a6e7f9121ee1c49a2565fe1d.png

    在抽象类中,定义了很多个静态常量进行维护,而当我们需要使用时,直接调用,这样就比我们写一个个的具体值要方便和易用了。

    acb79334452a32bda71743e151cf3a43.png

    2. 定义一个接口,在接口中定义常量维护枚举值

    我们新建一个interface CustomerInf.java

    package org.taoguoguo;

    /**

    * @author taoGG

    * @description 接口常量维护枚举值

    * @create 2020-09-13 15:47

    */

    public interface CustomerInf {

    int RED = 1;

    int GREEN = 2;

    int BLUE = 3;

    }

    在 EnumTest 进行测试

    package org.taoguoguo;

    /**

    * @author taoGG

    * @description Java枚举测试类

    * @create 2020-09-13 14:54

    *

    */

    public class EnumTest {

    public static void main(String[] args) {

    System.out.println(CustomerInf.RED);

    }

    }

    测试结果:

    1

    Process finished with exit code 0

    这种做法我们达到了和在抽象类中维护常量相同的目的。上面这两种做法都非常的简单易用,但也有弊端。比如我们只知道一个状态值,当我们要获取状态的属性或者相关的内容时,我们该怎么做呢?

    下面我们使用第三种方式,自定义枚举类,这种基本上达到和 Enum 关键字相同的作用,但有一点不足就是会较为复杂

    3.自定义枚举类,通过为类私有化构造器和固定实例对象进行枚举维护

    新建一个class SeasonEnum.java,代码如下:

    package org.taoguoguo;

    /**

    * @author taoGG

    * @description

    * @create 2020-09-13 15:58

    */

    public class SeasonEnum {

    //1.声明枚举对象的属性

    private final String seasonName;

    private final int code;

    //2.私有化类的构造器

    private SeasonEnum(String seasonName,int code){

    this.seasonName = seasonName;

    this.code = code;

    }

    //3.提供当前枚举类的多个对象 public static final

    public static final SeasonEnum SPRING = new SeasonEnum("春天",100);

    public static final SeasonEnum SUMMER = new SeasonEnum("夏天",200);

    public static final SeasonEnum AUTUMN = new SeasonEnum("秋天",300);

    public static final SeasonEnum WINTER = new SeasonEnum("冬天",400);

    //4.为类提供获取属性的方法

    public String getSeasonName() {

    return seasonName;

    }

    public int getCode() {

    return code;

    }

    //5.重写toString方法

    @Override

    public String toString() {

    return "SeasonEnum{" +

    "seasonName='" + seasonName + '\'' +

    ", code=" + code +

    '}';

    }

    }

    新建一个class SeasonEnumTest 进行测试,当我们通过自定义枚举类引用实例对象时,如下图可以看到,我们已经可以获取到我们的枚举对象了。

    416cf8f8a1fa7d5e92a0564252051b7b.png

    获取到枚举对象,我们当然也可以获取到对应的属性及方法,这种可用性就提高了很多,我们在开发程序进行判断,可以根据各种枚举值的指定属性来进行,提高了代码的可维护性。

    de6cb6679c0eda5a72ac6c21f833c831.png

    SeasonEnumTest 测试代码

    package org.taoguoguo;

    /**

    * @author taoGG

    * @description

    * @create 2020-09-13 16:04

    */

    public class SeasonEnumTest {

    public static void main(String[] args) {

    SeasonEnum spring = SeasonEnum.SPRING;

    System.out.println("自定义枚举类对象:" + spring);

    System.out.println("自定义枚举类属性:" + spring.getSeasonName());

    System.out.println("自定义枚举类属性:" + spring.getCode());

    }

    }

    根据我们上面的自定义枚举类方式,我们基本已经实现了枚举的功能了,但是就像上面说到的,如果开发中枚举类型较多,开发多个这样的自定义枚举类会非常的耗时,所以 jdk 5.0 之后,推出了 Enum 关键字定义枚举类

    三、Enum 关键字定义枚举类(jdk 5.0之后)

    enum 全称为 enumeration,是jdk 5.0 中引入的新特性,在Java 中被 enum 关键字修饰的类型就是枚举类型

    我们通过代码来示例来讲解和理解 enum 的用法,还是用我们刚刚自定以枚举类的例子,看看使用enum如何来写

    新建一个Java class ,Kind 类型选择 enum 如图:

    7994c1dfbd7b8b0da192b93a6bf9b05c.png

    枚举类创建注意:

    枚举实例必须在 enum关键字声明的类中显式的指定(首行开始的以第一个分号结束)

    枚举不允许使用new,clone,反射,序列化手动创建枚举实例

    package org.taoguoguo;

    /**

    * @author taoGG

    * @description

    * @create 2020-09-13 16:23

    */

    public enum Season {

    SPRING("春天",100),

    SUMMER("夏天",200),

    AUTUMN("秋天",300),

    WINTER("冬天",400);

    private final String seasonName;

    private final int code;

    Season(String seasonName, int code){

    this.seasonName = seasonName;

    this.code = code;

    }

    public String getSeasonName() {

    return seasonName;

    }

    public int getCode() {

    return code;

    }

    }

    使用 SeasonTest 测试类进行测试:

    package org.taoguoguo;

    /**

    * @author taoGG

    * @description

    * @create 2020-09-13 16:27

    */

    public class SeasonTest {

    public static void main(String[] args) {

    Season spring = Season.SPRING;

    System.out.println(spring);

    }

    }

    输出结果:

    SPRING

    Process finished with exit code 0

    注意,在enmu 枚举类中如果没有重写 toString方法,会默认使用Enum类本身提供的 toString 方法,返回枚举类名称,因为定义的枚举类默认隐式继承于java.lang.Enum

    1.枚举类主要方法介绍

    values() :该方法可以返回当前枚举类型的对象数组,可以很方便的遍历所有枚举值。一般我们可以根据枚举类的相关属性通过此方法遍历获取对应的枚举对象及枚举值

    valueOf(String str) : 根据枚举类名称获取枚举类对象

    toString(): 默认使用 java.lang.Enum的 toString方法,返回当前对象常量的名称,枚举类推荐重写返回自定义友好描述

    name(): 返回当前枚举对象名称,和toString作用上类似,当时toString支持重写,name方法是不能重写的,在本质上 toString 也是调用的 name方法,枚举定义 name 方法就是为了返回枚举对象名称,而 toString 应该根据需要进行重写

    ordinal(): 返回当前枚举对象的序号, 实现了 Comparable 接口,表明它是支持排序的 可以通过 Collections.sort 进行自动排序比较此枚举与指定对象的顺序

    compareTo(): 基于ordinal进行序号大小比较

    方式演示代码,小伙伴们可以自行运行输出一下,看看各个方法的作用,熟悉一下相关的方法api

    package org.taoguoguo;

    /**

    * @author taoGG

    * @description

    * @create 2020-09-13 16:27

    */

    public class SeasonTest {

    public static void main(String[] args) {

    System.out.println("========values()方法=======");

    for (Season season : Season.values()) {

    System.out.println(season);

    }

    System.out.println("===========================");

    System.out.println("========valueOf方法========");

    Season spring = Season.valueOf("SPRING");

    System.out.println(spring);

    System.out.println("===========================");

    System.out.println("========toString方法========");

    System.out.println(spring.toString());

    System.out.println("===========================");

    System.out.println("========name方法========");

    System.out.println(spring.name());

    System.out.println("===========================");

    System.out.println("========ordinal方法========");

    System.out.println(spring.ordinal());

    System.out.println("===========================");

    System.out.println("========compareTo方法========");

    System.out.println(spring.compareTo(Season.WINTER));

    System.out.println("===========================");

    }

    }

    2.枚举类对接口的实现方式

    准备工作

    新建一个EnumInf 接口,定义一个抽象方法

    package org.taoguoguo;

    /**

    * @author taoGG

    * @description

    * @create 2020-09-13 17:25

    */

    public interface EnumInf {

    void show();

    }

    1.实现接口,在enum中统一实现抽象方法

    新建一个EnumInf 接口,定义抽象方法 show()

    package org.taoguoguo;

    /**

    * @author taoGG

    * @description

    * @create 2020-09-13 17:25

    */

    public interface EnumInf {

    void show();

    }

    新建一个OrderStatus 枚举类 实现 EnumInf 接口

    package org.taoguoguo;

    /**

    * @author taoGG

    * @description

    * @create 2020-09-13 17:27

    */

    public enum OrderStatus implements EnumInf{

    SUCCESS(200,"交易成功"),

    Fail(500,"交易失败");

    private final int code;

    private final String desc;

    OrderStatus(int code, String desc){

    this.code = code;

    this.desc = desc;

    }

    public int getCode() {

    return code;

    }

    public String getDesc() {

    return desc;

    }

    /**

    * 第一种方式,枚举统一重写接口抽象方法

    */

    @Override

    public void show() {

    System.out.println("订单枚举对象");

    }

    }

    进行测试

    package org.taoguoguo;

    /**

    * @author taoGG

    * @description

    * @create 2020-09-13 17:32

    */

    public class OrderStatusTest {

    public static void main(String[] args) {

    OrderStatus success = OrderStatus.SUCCESS;

    success.show();

    }

    }

    输出结果

    订单枚举对象

    Process finished with exit code 0

    跟我们常用类实现没有什么区别,枚举也是可以统一实现的,那如果想针对不同的枚举对象进行不同状态的实现怎么办呢?比如我们的OA系统、或者电商系统中,根据不同状态 我们需要回写对应的数据,下面我们就来看看如何实现。

    2.枚举对象分别实现接口中的抽象方法

    案例跟接口统一实现一致,我们这边修改一下OrderStatus 枚举类,代码如下

    package org.taoguoguo;

    /**

    * @author taoGG

    * @description

    * @create 2020-09-13 17:27

    */

    public enum OrderStatus implements EnumInf{

    SUCCESS(200,"交易成功") {

    @Override

    public void show() {

    System.out.println("回写交易成功状态");

    }

    },

    Fail(500,"交易失败") {

    @Override

    public void show() {

    System.out.println("回写交易失败状态");

    }

    };

    private final int code;

    private final String desc;

    OrderStatus(int code, String desc){

    this.code = code;

    this.desc = desc;

    }

    public int getCode() {

    return code;

    }

    public String getDesc() {

    return desc;

    }

    }

    我们再修改下测试类代码:

    package org.taoguoguo;

    /**

    * @author taoGG

    * @description

    * @create 2020-09-13 17:32

    */

    public class OrderStatusTest {

    public static void main(String[] args) {

    OrderStatus success = OrderStatus.SUCCESS;

    success.show();

    OrderStatus fail = OrderStatus.Fail;

    fail.show();

    }

    }

    输出结果

    回写交易成功状态

    回写交易失败状态

    Process finished with exit code 0

    通过这种方式就可以轻而易举地定义每个枚举实例不同的行为方式,也达到了我们预期的效果,其实在开发过程中根据枚举的设计和设计模式的铺垫可以极大的简化我们的业务代码。

    3.Enum枚举类的工具类及应用场景

    1.EnumSet 和 EnumMap

    Java 中提供了两个方便操作enum的工具类——EnumSet 和 EnumMap。

    EnumSet 是枚举类型的高性能 Set 实现。它要求放入它的枚举常量必须属于同一枚举类型。

    // EnumSet的使用

    System.out.println("EnumSet展示");

    EnumSet errSet = EnumSet.allOf(OrderStatus.class);

    for (OrderStatus e : errSet) {

    System.out.println(e.name() + " : " + e.ordinal());

    }

    EnumMap 是专门为枚举类型量身定做的 Map 实现。虽然使用其它的 Map 实现(如HashMap)也能完成枚举类型实例到值得映射,但是使用 EnumMap 会更加高效:它只能接收同一枚举类型的实例作为键值,并且由于枚举类型实例的数量相对固定并且有限,所以 EnumMap 使用数组来存放与枚举类型对应的值。(计算机处理连续的资源使用局部内存效率更高)这使得 EnumMap 的效率非常高。

    // EnumMap的使用

    System.out.println("EnumMap展示");

    EnumMap errMap = new EnumMap(StateMachine.Signal.class);

    errMap.put(StateMachine.Signal.RED, "红灯");

    errMap.put(StateMachine.Signal.YELLOW, "黄灯");

    errMap.put(StateMachine.Signal.GREEN, "绿灯");

    for (Iterator> iter =errMap.entrySet().iterator(); iter.hasNext();) {

    Map.Entry entry = iter.next();

    System.out.println(entry.getKey().name() + " : " + entry.getValue());

    }

    2.枚举类与 Switch 的配合使用

    关于枚举与switch是个比较简单的话题,使用switch进行条件判断时,条件参数一般只能是整型,字符型。而枚举型确实也被switch所支持,在java 1.7后switch也对字符串进行了支持。

    实践

    新建一个 BizEnum 的java class,代码如下

    package org.taoguoguo;

    /**

    * @author taoGG

    * @description 企业类型枚举

    * @create 2020-09-13 21:24

    */

    public enum BizEnum {

    COUNTRIES(101,"国有企业"),

    PRIVETE(102,"私营企业"),

    SOHO(103,"个体单位");

    private final int code;

    private final String desc;

    BizEnum(int code, String desc){

    this.code = code;

    this.desc = desc;

    }

    public int getCode() {

    return code;

    }

    public String getDesc() {

    return desc;

    }

    //根据编码获取当前枚举对象的方法

    public static BizEnum getBizTypeByCode(int code){

    for (BizEnum bizEnum : BizEnum.values()) {

    if(code == bizEnum.getCode()){

    return bizEnum;

    }

    }

    return null;

    }

    }

    结合Switch进行测试

    package org.taoguoguo;

    /**

    * @author taoGG

    * @description

    * @create 2020-09-13 21:31

    */

    public class BizTest {

    public static void main(String[] args) {

    BizEnum bizType = BizEnum.getBizTypeByCode(101);

    switch (bizType){

    case COUNTRIES:

    System.out.println("国有企业");

    break;

    case PRIVETE:

    System.out.println("私营企业");

    break;

    case SOHO:

    System.out.println("个体单位");

    break;

    default:

    System.out.println("创业中");

    }

    }

    }

    输出结果:

    国有企业

    Process finished with exit code 0

    总结

    jdk 5.0之前我们可以自定义枚举类,jdk 5.0之后使用enum关键字定义枚举类,枚举类默认继承自java.lang.Enum,使用枚举类将常量组织起来,便于统一管理。例如错误码、状态机等场景中,较为合适使用枚举类。

    枚举类常用方法介绍及枚举类实现抽象类、接口等抽象方法的两种方式。

    枚举常用的工具类及与switch使用的场景。

    展开全文
  • 有没有办法解决由两个枚举相互引用引起的类加载问题?我有两组枚举,foo和bar,定义如下:public class EnumTest {public enum Foo {A(Bar.Alpha),B(Bar.Delta),C(Bar.Alpha);private Foo(Bar b) {this.b = b;}public ...

    有没有办法解决由两个枚举相互引用引起的类加载问题?

    我有两组枚举,foo和bar,定义如下:

    public class EnumTest {

    public enum Foo {

    A(Bar.Alpha),

    B(Bar.Delta),

    C(Bar.Alpha);

    private Foo(Bar b) {

    this.b = b;

    }

    public final Bar b;

    }

    public enum Bar {

    Alpha(Foo.A),

    Beta(Foo.C),

    Delta(Foo.C);

    private Bar(Foo f) {

    this.f = f;

    }

    public final Foo f;

    }

    public static void main (String[] args) {

    for (Foo f: Foo.values()) {

    System.out.println(f + " bar " + f.b);

    }

    for (Bar b: Bar.values()) {

    System.out.println(b + " foo " + b.f);

    }

    }

    }

    以上代码作为输出生成:

    A bar Alpha

    B bar Delta

    C bar Alpha

    Alpha foo null

    Beta foo null

    Delta foo null

    我理解它发生的原因——JVM开始类加载foo;它在foo.a的构造函数中看到bar.alpha,所以它开始类加载bar。它在对bar.alpha的构造函数的调用中看到foo.a的引用,但是(因为我们仍然在foo.a的构造函数中)foo.a此时为空,所以bar.alpha的构造函数被传递为空。如果我反转两个for循环(或者在foo之前的引用条),输出会改变,这样条的值都是正确的,但是foo的值不是。

    有没有办法避开这个?我知道我可以在第三节课上创建一个静态地图和一个静态地图,但这对我来说相当糟糕。我也可以创建引用外部映射的foo.getbar()和bar.getfoo()方法,这样它甚至不会更改我的接口(我使用的实际类是inspectors而不是public字段),但它对我来说还是有点不干净。

    (我在实际系统中这样做的原因是:foo和bar表示两个应用程序互相发送的消息类型;foo.b和bar.f字段表示给定消息的预期响应类型-所以在我的示例代码中,当app_1收到foo.a时,它需要用bar.alpha回复,反之亦然。)

    事先谢谢!

    展开全文
  • 枚举类型 :枚举常量的一组集合,包含者一些操作方法,枚举类是不可变的,通常用作单实例操作。包含的方法自带静态方法 values() 返回枚举类中枚举常量数组 (按枚举常量声明的顺序返回)toString()方法 返回枚举常量...
  • 可以将这些装备标记为:1、2、3 但是这种情况,我们在给变量赋值的有时候赋值为错误的值比如:0 或者true这时候就出现枚举数据类型,枚举包含有限个命名:public enum Size { 上线,下线,报废 }对于枚举在文档中...
  • 有没有一种方法可以解决由两个互相引用的枚举引起的类加载问题?我有两组枚举Foo和Bar,它们的定义如下:public class EnumTest {public enum Foo {A(Bar.Alpha),B(Bar.Delta),C(Bar.Alpha);private Foo(Bar b) {...
  • java枚举和枚举类 当Java 8即将面世时,您确定您对... Java枚举是可以包含行为甚至数据的真实类。 让我们用一种方法用枚举来表示“ 剪刀石头布”游戏。 以下是定义行为的单元测试: @Test public void paper_b...
  • 枚举类型,它是字段包含固定数量的常量的类型。常见的例子,罗盘的方向包括东西南北,还有星期的天。因为他们是常量,所有枚举类型的字段的名字一般是大写字母。java编程语言,声明一个枚举类型使用enum关键字。例如...
  • java枚举

    2020-02-23 10:22:44
    枚举类型的定义包含枚举声明和枚举体: enum 枚举名{ 枚举体(常量列表) } 所有的枚举类型隐性的继承自java.lang.Enum。枚举实质上还是类! 而没个被枚举的成员实质上就是一个枚举类型的实例,他们...
  • 这篇文章主要介绍了Java枚举类接口实例原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下枚举类可以实现一个或多个接口。与普通类实现接口完全一样,枚举...
  • 这应该做到这一点:public static boolean contains(String test) { for (Choice c : Choice.values()) ... }这样的方式意味着你不必担心后面添加额外的枚举值,他们都被检查。编辑:如果枚举非常大,您可以将值粘贴...
  • Java枚举

    2016-07-25 22:32:50
    Java枚举   1、按照我的理解枚举其实就是一种特殊的类,这种类的对象只有有限的那几种。   2、枚举的定义:   (1)定义枚举必须使用关键字enum,简单示例如下:   public enum DemoEnum{ ONE,TWO,...
  • 问题我知道Java枚举会被编译成一个包含私有构造参数和一堆静态方法的类,当去比较两个枚举的时候,总是使用equals()方法,例如:public useEnums(SomeEnum a){if(a.equals(SomeEnum.SOME_ENUM_VALUE)){...}...}除此...
  • 1、枚举(enum)enum是一个特殊的类,代表一组常量(不可更改的变量,如,final变量)。...的方式访问:enum Level {LOW,MEDIUM,HIGH}如访问枚举类型Level中LOW则使用Level.LOW2、类中定义枚举还可以在类中包含一个enum...
  • Java 枚举类型简介

    2018-03-26 17:14:00
    枚举类型是用于定义常量集合的特殊类型,更确切的说,JAVA枚举类型是一种特殊的 java 类。枚举类型可以包含常量、方法等。在 java5 中添加了 java 枚举类型。 Java 枚举示例 下面是一段简单的示例: public enum ...
  • java 枚举

    2020-05-25 12:27:19
    1、枚举类型中可以包含属性、方法、构造方法(必须为私有) 2、构造方法必须为私有的,不允许在外部构建对象(不要写setter方法),只能在内部创建对象 3、在内部创建枚举对象时必须位于类的第一行(非注释行)...
  • 本文是Java枚举类型的第三篇文章,对于枚举类型的实现原理和包含的方法特性不了解的小伙伴可以先去参考历史文章中的《Java中的枚举类型(Enum)详解》和《详解Java枚举类型(Enum)中的方法》两篇文章。接下来,我...
  • 本文实例讲述了Java包含抽象方法的枚举类。分享给大家供大家参考,具体如下:一 点睛可以在枚举类里定义一个抽象方法,然后把这个抽象方法交给各枚举值去实现即可。枚举类里定义抽象方法时无需显式使用abstract...
  • 基本使用首先,所有枚举类型都有一个基类:java.lang.Enum抽象类,里面提供了一些基础属性和基础方法。枚举类型不仅可以定义枚举常量,还可以定义属性、构造方法、普通方法、抽象方法等,比如,我们定义了一个包含...
  • 假设有一个Operation枚举类,它的四个枚举值PLUS,MINUS,TIMES,DIVIDE分别代表加,减,承,除四种运算。为此,定义下面的Operation枚举类。public enum Operation{PLUS, MINUS, TIMES, DIVIDE;//为枚举类定义一个...
  • 枚举数据类型和枚举接口之间有任何区别.我在两者之间变得困惑.我得到了我们的答案,他们没有关系,但是带给我另一个...包含该行的完整代码import java.util.Vector;import java.util.Enumeration;public class Enume...
  • java枚举类学习

    2017-06-06 11:13:07
    java枚举类学习:实现接口的枚举类,包含抽象方法的枚举类
  • Java枚举

    千次阅读 2019-01-31 21:12:15
    枚举枚举枚举类成员变量,方法,构造器实现接口包含抽象方法的枚举枚举枚举类的对象是有限而且固定的。 使用enum 关键词定义。 枚举类是一种特殊的类 枚举类可以实现一个或多个接口,不能显式的继承其他...
  • Java枚举与具有公共静态最终字段的类...最初,我很高兴得知Java枚举可以包含多个数据,这看起来非常有利(http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html)。然而,从那时起我发现C#中缺少很多功能...
  • 本文实例讲述了Java包含抽象方法的枚举类。分享给大家供大家参考,具体如下:一 点睛可以在枚举类里定义一个抽象方法,然后把这个抽象方法交给各枚举值去实现即可。枚举类里定义抽象方法时无需显式使用abstract...
  • //为枚举类定义抽象方法,具体由枚举值提供实现 public abstract double eval(double x, double y); } public class OperationTest { public static void main(String[] args) { // TODO Auto-generated method ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,320
精华内容 528
关键字:

java枚举包含

java 订阅