在java的枚举类中照样可以定义静态函数、非静态函数,这跟普通类一样。静态函数通过类访问,非静态函数通过枚举常量(其实就是枚举类的对象)来访问。
例如,下面枚举类的代码中,显式定义了一个非静态函数process、一个静态函数m2:
package com.thb;
public enum Color {
RED, BLUE, BLACK;
public void process() {
System.out.println("in non-static method process");
}
public static void m2() {
System.out.println("in static method m2");
}
}
下面定义一个调用类:
package com.thb;
public class Demo7 {
public static void main(String[] args) {
// 静态函数直接通过枚举类名访问
Color.m2();
/*
* 对于非静态函数,要通过枚举类的常量来访问,本质是通过对象访问
* 枚举类Color中定义了枚举常量BLACK,
* 那么其实隐式声明了一个public static final enum com.thb.Color BLACK
*/
Color.BLACK.process();
// 下面这样访问非静态函数是非法的
//Color.process();
Color.RED.process();
}
}
运行输出:
in static method m2
in non-static method process
in non-static method process
下面用debug模式看看执行过程的细节:
执行到静态函数m2()内部:
通过Color.BLACK执行到非静态函数process()内部,从右边的变量可以看到,其实是通过对象(this)来访问的:
通过Color.RED执行到非静态函数process()内部,从右边的变量可以看到,其实是通过对象(this)来访问的: