JAVA的枚举类型有什么特点?

JAVA的枚举类型有什么特点?,第1张

1 特殊类型的常量值列表
2 类型是枚举
3 声明在类外和类内,不能为方法
4 声明在类外部的,不能为static ,final,abstract,protected,private
5 可以有构造方法,普通方法,变量跟常量代码块
6 可以给构造方法传参
7 构造方法可以有参可以重载
8 构造方法不能直接引用,必须总是在初始化时被调用
9 ;在声明的结尾是可选的
全手打 望采纳

枚举用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。

任意两个枚举成员不能具有相同的名称

在枚举类型中声明的第一个枚举成员它的默值为0  

允许多个枚举成员有相同的值

没有显示赋值的枚举成员的值,总是前一个枚举成员的值+1

eg:

public enum Number

{

a=1,

b,

c=1,

d

} ;

b的值为2,d的值为2

可以是整型,顺便给你我总结的枚举。
1枚举对象里面的值都必须是唯一的,enum 中不能删除添加元素。
2元素是公有静态的public static,构造方法只能为private。
2可以通过 Enum 类名直接引用该常量,如Unitu1
3允许程序员为eunm 实例编写方法,如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例,否则编译器会报错。
4可以创建一个enum 类,把它看做一个普通的类(可以有抽象方法)。可以添加其他方法,覆盖它本身的方法。
5values() 方法是编译器插入到enum 定义中的static 方法,所以,当你将enum 实例向上转型为父类Enum 是,values() 就不可访问了。
6所有enum都继承javalangEnum类。
7所有枚举类都提供一个静态的values()方法(返回该枚举类所有对象组成的数组),便于遍历所有枚举对象。
for (Unit u: Unitvalues()) {
Systemoutprintln(u); }

import javautilArrayList;
import javautilList;
public class Color{
    private String value;
    private static List<Color> colors = new ArrayList<Color>();
    public Color(String value) {
        thisvalue = value;
        colorsadd(this);
    }
    public static Color Red = new Color("red");
    public static Color Blud = new Color("Blud");
    public static Color Green = new Color("Green");
    
    public void test(){
        Systemoutprintln("我是"+value);
    }
    public static Color[] values(){
        return colorstoArray(new Color[colorssize()]);
    }
    
    public static void main(String[] args) {
        ColorRedtest();
        ColorGreentest();
        ColorBblacktest();
        
        for (Color c : ColorBvalues()) {
            ctest();
        }
    }
    
}
/
  子类
  @author 储宝
 
 /
class ColorB extends Color{
    public ColorB(String value) {
        super(value);
    }
    
    public static ColorB  black = new ColorB("black");
    
}

枚举的伪实现。和枚举不同的是,还是可以new一个对象,本来是想把构造私有化的,但是就不能继承了。

定义一个简单的枚举代码
public enum WorkDay{ Monday,Tuesday,Wednesday,Thurday,Friday;//定义时,枚举值间有逗号隔开,最后用分号结束 }
废话不多说,直接上main 方法,拿去玩玩吧:
Java代码
public static void main(String []args) { / 枚举类型是一种类型,既然是类型,就是跟int,char他们 一样的, 拿来定义变量,限制你对变量的赋值,就像 int a,你不能够给a一个 string的值 同理,一个枚举用来定义一个变量时,你只能够赋枚举值,其方式为 "枚举名值" / WorkDay myworkday=WorkDayWednesday; / 补充点switch的基础知识,switch语句括号中支持byte \short \char \int类型, jdk 15以后支持枚举,所以,这里可以直接使用枚举变量myworkday。 呵呵,在jdk17后将switch将支持string / switch (myworkday) { /枚举重写了toString()方法,所以枚举变量的值不带前缀 myworkday 里面的值应该是枚举括号里面的那几个 / case Monday: Systemoutprintln("you work day is Monday !"); break; case Tuesday: Systemoutprintln("you work day is Tuesday!"); break; case Wednesday: Systemoutprintln("you work day is Wednesday !"); break; case Thurday: Systemoutprintln("you work day is Thurday !"); break; case Friday: Systemoutprintln("you work day is Friday !"); break; } Systemoutprintln("--------遍历所有值----------"); //----使用values()方法返回一个数组 for(WorkDay day:WorkDayvalues()) { Systemoutprintln(day); } //-----既然是数组,就可以统计大小 Systemoutprintln("WorkDay 里面有 "+WorkDayvalues()length+" 个元素"); //--------------------调用 ordinal()方法,返回枚举值在枚举中的索引,数组索引嘛,当然从0开始 Systemoutprintln(WorkDayMondayordinal()); Systemoutprintln(WorkDayFridayordinal()); //---默认实现javalangComparable接口 ,测试测试 Systemoutprintln(WorkDayMondaycompareTo(WorkDayThurday));//结果应该是 -3 //---Monday的索引为0,Thurday为 3,0-3=-3, Systemoutprintln(WorkDayFridaycompareTo(WorkDayTuesday));//同理,结果应该为4-1=3, }
简单吧,来点狠的,前面说了,枚举有点像类,只是把class换成了enum,那么它跟一般的类一样可以添加属性或方法。
带方法与属性的enum代码
public enum WeAreJavaer{ chinese,java, spring, DB2, AIX; // 枚举列表,必须写在最前面,否则编译出错 private final static String location = "javaeye"; //定义一个属性 public static WeAreJavaer getInfomation() { WeAreJavaer flag=null; if (locationequals("javaeye")) { flag=java; } else { flag= chinese; } return flag; } }
老规矩,直接上main()方法测试:
写道
public static void main(String []ags) { Systemoutprintln("---------------------测试调用枚举中写的方法-------------------------------"); Systemoutprintln("直接调用枚举里面的方法: "+ WeAreJavaergetInfomation()); }
3、来点更狠的。
你可以通过括号来给enum赋值,这样的话,你必须有带参的构造方法,还需要有一属性与方法,否则编译时会出错。
另外,你如果给enum里面的元素赋值的话,要么都赋,要么都不赋,不要东赋一个,西赋一个。
如果不赋值则不能写构造方法,如果你赋值了,而没有构造方法,编译还是通不过,废话不多少,来,看:
可赋值的enum代码
public enum People { xiaowang(20), xiaozhang(32),xiaoli(50), xiaogou(21); private final int age; People(int value) { //构造器只能是默认或者private, 从而保证构造函数只能在内部使用 thisage = value; } public int getAge() { return age; } }
好吧,啥也不说了,接下来的事,你懂地:
测试带值enum代码
public static void main(String[] args) {
for(People people:Peoplevalues()){
/通过getValue()取得相关枚举的值/
Systemoutprintln(people+" 的年龄 :"+peoplegetAge());
}
}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/13397934.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-28
下一篇 2023-07-28

发表评论

登录后才能评论

评论列表(0条)

保存