枚举、结构体、共用体【Java】

枚举类(class classname):

 为了让编译器能自动检查某个值在枚举的集合内,并且,不同用途的枚举需要不同的类型来标记,不能混用,我们可以使用enum来定义枚举类:

enum Weekday
    {
        SUN, MON, TUE, WED, THU, FRI, SAT;
    }

    public static void main(String[] args)
    {
        Weekday day = Weekday.WED;
        if (day == Weekday.SAT || day == Weekday.SUN)
            System.out.println("Work at home!");
        else
            System.out.println("Work at office!");
    }

 注意到定义枚举类是通过关键字enum实现的,我们只需依次列出枚举的常量名。和int定义的常量相比,使用enum定义枚举有如下好处:

  • enum常量本身带有类型信息
  • 不可能引用到非枚举的值,因为无法通过编译
  • 不同类型的枚举不能互相比较或者赋值,因为类型不符

enum的比较:

 使用enum定义的枚举类是一种引用类型。引用类型比较,要使用 equals() 方法,如果使用比较,它比较的是两个引用类型的变量是否是同一个对象。因此,引用类型比较,要始终使用 equals() 方法,但 enum 类型可以例外,因为 enum 类型的每个常量在 JVM 中只有一个唯一实例,所以可以直接用 = = == == 比较

enum类型:

 enum定义的类型就是class,只不过它有以下几个特点:

  • 定义的enum类型总是继承自java.lang.Enum,且无法被继承
  • 只能定义出enum的实例,而无法通过new操作符创建enum的实例
  • 定义的每个实例都是引用类型的唯一实例
  • 可以将enum类型用于switch语句
     编译后的enum类和普通class并没有任何区别,因为enum是一个class,每个枚举的值都是class实例,因此,这些实例有一些方法:
  • name(): 返回常量名,例如:String s = Weekday.SUN.name(); // "SUN"
  • ordinal():返回定义的常量的顺序,从0开始计数,改变枚举常量定义的顺序就会导致ordinal()返回值发生变化,例如:int n = Weekday.MON.ordinal(); // 1

结构体(struct structname):

 结构体也相当于把几种数据类型组合起来。结构体是值类型,赋值时会直接复制

定义:

	struct example 			//方法一:声明结构体
	{
	    int num;
	};
	
	struct stu				//方法二:声明同时定义变量 stu1、数组 stu2 
	{
	    int name;
	}stu1,stu2[20];
	
	struct 				//方法三:没有类型名,只需要下面直接定义的俩变量
	{
   		char* name;
	} temp1,temp2;

共用体(union unionname):

概念:

 用同一段内存存放不同类型的变量,也就是使用覆盖技术,后一个数据覆盖前面的数据,使几个不同的变量共享同一段内存的结构成为共用体。往往在数据处理中,有时需要对同一段内存空间安排不同的用途,这时用共用体类型比较方便

定义:

	struct MyStruct
	{
	    long num;
	    float score;
	    char name[20];
	    int  age;
	    struct MyStruct *netx;
	};
	MyStruct.num;			//使用:直接通过结构体名.成员变量访问

特点:

  • 共用体与结构体非常相似,结构体变量所占内存长度等于各个成员占内存长度的和,每个成员分别占有自己的内存,而共用体变量所占内存长度等关于最长的成员的长度
  • 同一段内存可以存放几种不同类型的成员,但每一瞬间只能存放其中一个成员
  • 可以对共用体变量初始化,但初始化表中只能有一个常量
  • 共用体变量中起作用的是最后一次被赋值的成员变量
  • 共用体变量的地址和它的各个成员的地址都是同一地址
  • 不能对共用体变量名赋值,也不能企图引用变量名来得到一个值
  • 共用体类型可以出现在结构体类型定义中,也可以定义共用体数组,反之也可以
上一篇:MySQL user权限表及其他权限表详解


下一篇:枚举