Java开发知识之Java的枚举
一丶什么是枚举
枚举可以理解为就是常量,在Java中我们定义常量.都是用 final语句. C++中都是用const关键字.
枚举跟C++概念都是一样的.就是特定的常量而已.
二丶Java中的枚举
java中的常量.一般都是final定义.但是我们讲过.final定义的常量.初始化的时候可以每次给不同的值.
所以加上static 才能保证其内存不会改变.一般常量都是定义在接口中给我们使用的.
可能需要连续定义.
例如:
public final static int a = 1;
public final static int b = 2;
public final static int c = 3;
....
枚举就是管理一组常量的一个结构而已.
据图语法如下:
权限修饰符 enum关键字 枚举名称{
枚举常量,
枚举常量,
枚举常量
}
枚举常量的定义
枚举名称 常量;
具体使用如下代码:
类代码:
public class MyTestenum { public MyTestenum() { // TODO 自动生成的构造函数存根 } public enum NUMBER{ N_NUMBER1, N_NUMBER2, N_NUMBER3 } }
外部new对象.并且使用enum定义常量.
public static void main(String[] args) throws MyException { MyTestenum t = new MyTestenum(); NUMBER n = NUMBER.N_NUMBER1; //定义枚举常量n,必须初始化,可以为null也可以是枚举中的常量. switch(n) { case N_NUMBER1: System.out.println("1"); break; case N_NUMBER2: System.out.println("2"); break; case N_NUMBER3: System.out.println("3"); break; } }
可以看到.我们可以直接使用 枚举 定义枚举变量. 并且赋值其中一个枚举常量.
但是我们又有疑问了. 我们的枚举常量并没有初始化.但是为什么程序不出错.而且还打印了1;
原因是. 枚举常量.默认就是从0开始.
三丶枚举作为方法传递
我们可以定义枚举常量.规定只接受什么类型的枚举.
public class MyTestenum { public MyTestenum() { // TODO 自动生成的构造函数存根 } enum NUMBER{ N_NUMBER1 , N_NUMBER2 , N_NUMBER3 } public static void doit(NUMBER c) { switch(c) { case N_NUMBER1: break; case N_NUMBER2: break; case N_NUMBER3: break; } } }
使用:
public static void main(String[] args) throws MyException { MyTestenum.doit(NUMBER.N_NUMBER1); }
我们要传入枚举常量才可以.
四丶枚举的高级用法
我们知道.JAVA是一个面向对象的程序. 我们定义的枚举.其实已经默认继承了一个类
枚举类型可以看做一个类,其中的成员也都被默认使用 final public static 修饰了.所以枚举名称(变量)
其实就是一个引用.他继承了父类.则有父类的方法可以使用.
常用方法;
代码举例以values()为例.遍历枚举成员
public static void main(String[] args) throws MyException { MyTestenum.doit(NUMBER.N_NUMBER1); NUMBER n = null; for(int i = 0; i < n.values().length;i++) { System.out.print(" " + n.values()[i]); } }
使用方法返回了一个数组. 又使用链式方法.调用了 length求数组成员. 下面则进行遍历.
五丶知识总结
1.定义枚举关键字
enum 名称{成员,成员};
1.枚举定义的成员. 默认都是 public static final 修饰的. 其成员是一个常量.且内存不可以更改.
2.枚举方法.
枚举可以当参数传递给方法使用.
3.枚举高级用法
枚举可以看成一个类.他的成员都是它的实例. 它集成子java.lang.Enum类. 我们可以使用方法进行遍历.
例如values():返回枚举数组. 可以进行遍历枚举.并且输出结果.