java 枚举常量还能这么用

枚举类 

package com.atguigu.springcloud.alibaba;

public enum Foo {
    //常量列表
    VALUE_1 {
        public int myVariable = 1;
    },
    VALUE_2 {
        int i=1;
        public int myMethod() {
            return 2;
        }
    };

    public int myMethod() {
        System.out.println("===");
        return 3;
    }

    public static int staticMethod() {
        System.out.println("===");
        return 4;
    }
}

测试类

import com.atguigu.springcloud.alibaba.Foo;

public class TestFoo {
    public static void main(String[] args) {
        //1)第一种情况:常量信息先加载,如果其中没有某个方法,会默认在枚举类中找然后调用
        //2)第二种情况:常量信息先加载,如果其中有某个方法,会就近找该方法然后调用
        //3)第三种情况:常量中有某个方法,但常量外没有该方法,会编译出错
        //思考:为什么编译出错?
        //猜想:编译期间,调用的方法默认只在枚举类中常量外检查。
        //运行期间,首先通过编译,即该方法在枚举类中常量外有,然后实际调用遵循就近原则,有则调用内部的,没有则调用外部的。
        System.out.println(Foo.VALUE_2.myMethod());

        System.out.println(Foo.staticMethod());//直接调用静态方法
    }
}

分析:

1)第一种情况:常量信息先加载,如果其中没有某个方法,会默认在枚举类中常量外找然后调用

输出3

2)第二种情况:常量信息先加载,如果其中有某个方法,会就近找该方法然后调用

输出2

3)第三种情况:常量中有某个方法,但常量外没有该方法,会编译出错

思考:为什么编译出错?

猜想:编译期间,调用的方法默认只在枚举类中常量外检查。运行期间,首先通过编译,即该方法在枚举类中常量外有,然后实际调用遵循就近原则,有则调用内部的,没有则调用外部的。

其它:

枚举类中的常量和静态方法可以直接使用枚举类名调用。

猜你喜欢

转载自blog.csdn.net/wxd772113786/article/details/107582532