Java枚举类的构造函数

Java枚举类可以定义构造函数

Java枚举类可以定义构造函数,枚举常量后面括号中的参数值就是传递给构造函数的参数。

代码示例:

package com.thb;

public enum Constant {
	// 枚举常量后面括号中的参数值就是传递给构造函数的参数值
	REGISTER((byte)0x01), HEARTBEAT((byte)0x02), CONFORM((byte)0x07);
	private final byte functonCode;	
	
	// 定义构造函数
	private Constant(byte functonCode){
		this.functonCode = functonCode;
	}	
	
	public byte functonCode() {
		return this.functonCode;
	}
}

枚举类的构造函数只能是private的

枚举类的构造函数只能是private的,写不写private这个关键字都一样。如果不明确声明private的,编译器也会编译为private的。
如果声明为其它的访问控制修饰符(例如public、protected),就会编译出错。

代码示例:
定义一个枚举类,明确声明了一个构造函数,但没有明确声明private关键字:

package com.thb;

public enum Color {
	RED, BLUE, WHITE;
	
	Color() {
		
	}
}

打开Color编译后生成的class文件(为了简洁,只截取了class文件中构造函数这部分),可以看到构造函数被设置为private的:

  // Method descriptor #18 (Ljava/lang/String;I)V
  // Stack: 3, Locals: 3
  private Color(java.lang.String arg0, int arg1);
    0  aload_0 [this]
    1  aload_1 [arg0]
    2  iload_2 [arg1]
    3  invokespecial java.lang.Enum(java.lang.String, int) [31]
    6  return
      Line numbers:
        [pc: 0, line: 6]
        [pc: 6, line: 8]
      Local variable table:
        [pc: 0, pc: 7] local: this index: 0 type: com.thb.Color

在枚举类的构造函数中不能包含对父类构造函数的引用

如果在枚举类的构造函数中包含对父类构造函数的引用,就会编译出错。

代码示例:
下面这个枚举类的构造函数中包含了对父类构造函数的引用,编译出错:
在这里插入图片描述
在这里插入图片描述

如果枚举类没有声明构造函数,那么编译器会生成默认构造函数

代码示例:
下面定义了一个枚举类,没有声明构造函数:

package com.thb;

public enum Fruit {
	APPLE, ORANGE, WATERMELON;
}

打开枚举类编译后的class文件(为了简洁,只截取了class文件中生成的默认构造函数),可以发现编译器生成了默认构造函数:

  // Method descriptor #18 (Ljava/lang/String;I)V
  // Stack: 3, Locals: 3
  private Fruit(java.lang.String arg0, int arg1);
    0  aload_0 [this]
    1  aload_1 [arg0]
    2  iload_2 [arg1]
    3  invokespecial java.lang.Enum(java.lang.String, int) [31]
    6  return
      Line numbers:
        [pc: 0, line: 3]
      Local variable table:
        [pc: 0, pc: 7] local: this index: 0 type: com.thb.Fruit
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值