Java 什么';“这是”的用法;“枚举”;在爪哇?
所以我研究了这个“enum”类型,对我来说它有点像一个美化的数组/Java 什么';“这是”的用法;“枚举”;在爪哇?,java,enums,Java,Enums,所以我研究了这个“enum”类型,对我来说它有点像一个美化的数组/ArrayList/List。它到底有什么用 枚举是一种安全类型,因此无法在运行时分配新值。此外,您还可以在switch语句(如int)中使用它。Enum作为一种固定数量的常量,至少可以用于两种用途 常数 public enum Month { JANUARY, FEBRUARY, ... } 这比创建一组整数常量要好得多 创建一个单件 public enum Singleton { INSTANCE /
ArrayList
/List
。它到底有什么用 枚举是一种安全类型,因此无法在运行时分配新值。此外,您还可以在switch语句(如int)中使用它。Enum作为一种固定数量的常量,至少可以用于两种用途
常数
public enum Month {
JANUARY, FEBRUARY, ...
}
这比创建一组整数常量要好得多
创建一个单件
public enum Singleton {
INSTANCE
// init
};
您可以使用enum做一些非常有趣的事情,看看
另外,请看一下枚举是为定义的一组contant提供易于记忆的名称(也可以选择使用一些有限的行为)的基础
您应该使用枚举,否则将使用多个静态整数常量(例如,公共静态int角色\u ADMIN=0
或血液类型\u AB=2
)
使用枚举而不是这些枚举的主要优点是类型安全、在尝试使用错误值时编译类型警告/错误以及为相关的“常量”提供名称空间。此外,它们更易于在IDE中使用,因为它也有助于代码的完成 枚举类型是其字段由一组固定常量组成的类型。常见的示例包括指南针方向(北、南、东和西的值)和一周中的几天
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY
}
需要表示一组固定常量时,应随时使用枚举类型。这包括自然枚举类型,例如太阳系中的行星,以及在编译时知道所有可能值的数据集,例如菜单上的选项、命令行标志等等
下面是一些代码,演示如何使用上面定义的日枚举:
public class EnumTest {
Day day;
public EnumTest(Day day) {
this.day = day;
}
public void tellItLikeItIs() {
switch (day) {
case MONDAY:
System.out.println("Mondays are bad.");
break;
case FRIDAY:
System.out.println("Fridays are better.");
break;
case SATURDAY: case SUNDAY:
System.out.println("Weekends are best.");
break;
default:
System.out.println("Midweek days are so-so.");
break;
}
}
public static void main(String[] args) {
EnumTest firstDay = new EnumTest(Day.MONDAY);
firstDay.tellItLikeItIs();
EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);
thirdDay.tellItLikeItIs();
EnumTest fifthDay = new EnumTest(Day.FRIDAY);
fifthDay.tellItLikeItIs();
EnumTest sixthDay = new EnumTest(Day.SATURDAY);
sixthDay.tellItLikeItIs();
EnumTest seventhDay = new EnumTest(Day.SUNDAY);
seventhDay.tellItLikeItIs();
}
}
输出为:
星期一不好。周中的日子一般。
星期五不好 更好。
周末最好。
周末最好。
Java编程语言枚举类型比其他语言中的枚举类型强大得多。枚举声明定义了一个类(称为枚举类型)。枚举类主体可以包括方法和其他字段。编译器在创建枚举时会自动添加一些特殊方法。例如,它们有一个静态值方法,该方法返回一个数组,该数组按声明的顺序包含枚举的所有值。此方法通常与for each构造结合使用,以迭代枚举类型的值。例如,下面行星类示例中的代码迭代太阳系中的所有行星
for (Planet p : Planet.values()) {
System.out.printf("Your weight on %s is %f%n",
p, p.surfaceWeight(mass));
}
除了属性和构造器外,Planet还提供了一些方法,允许您检索每个星球上某个对象的表面重力和重量。下面是一个示例程序,它可以测量你在地球上的体重(以任何单位表示),并计算和打印你在所有行星上的体重(以相同单位表示):
公共枚举行星{
水银(3.303e+23,2.4397e6),
金星(4.869e+24,6.0518e6),
接地(5.976e+24,6.37814e6),
火星(6.421e+23,3.3972e6),
木星(1.9e+27,7.1492e7),
土星(5.688e+26,6.0268e7),
天王星(8.686e+25,2.5559e7),
海王星(1.024e+26,2.4746e7);
私人最终双质量;//单位为千克
专用最终双半径;//以米为单位
行星(双质量,双半径){
这个质量=质量;
这个半径=半径;
}
私有双质量(){return mass;}
专用双半径(){return radius;}
//通用重力常数(m3 kg-1 s-2)
公共静态最终双G=6.67300E-11;
双表面整体性(){
返回G*质量/(半径*半径);
}
双曲面灯光(双质量){
返回其他质量*表面间隙();
}
公共静态void main(字符串[]args){
如果(args.length!=1){
System.err.println(“用法:JavaPlanet”);
系统退出(-1);
}
双倍重量=double.parseDouble(args[0]);
双质量=土壤重量/土壤表面完整性();
对于(行星p:Planet.values())
System.out.printf(“您在%s上的重量是%f%n”,
p、 p.表面光(质量);
}
}
如果从命令行运行参数为175的Planet.class,则会得到以下输出:
$java Planet 175你在水星上的体重是66.107583
你的体重 金星上的体重是158.374842
你在地球上的体重是 175.000000
你在火星上的体重是66.279007
你在木星上的体重是442.847567
你在土星上的体重是186.552719
你的 天王星的重量是158.397260
你在海王星的重量是 199.207413
来源:如果类应具有固定的可枚举实例数,则使用
枚举
而不是类
示例:
=7个实例→ <代码>枚举DayOfWeek
=4个实例→ <代码>枚举CardSuit
=1个实例→ <代码>枚举Singleton
=实例数量可变→ <代码>类别产品
=实例数量可变→ <代码>类别用户
=实例数量可变→ <代码>类别Date
枚举
比其他语言中的对应语言功能强大得多,它们只不过是美化的整数。新的枚举声明定义了一个完整的类(称为枚举类型)。除了解决java 5.0之前使用的以下int-Enum模式存在的所有问题(非类型安全、无命名空间、脆性和打印值不具信息性
):
public static final int seasure\u WINTER=0代码>
它还允许您向枚举类型t添加任意方法和字段
public enum Planet {
MERCURY (3.303e+23, 2.4397e6),
VENUS (4.869e+24, 6.0518e6),
EARTH (5.976e+24, 6.37814e6),
MARS (6.421e+23, 3.3972e6),
JUPITER (1.9e+27, 7.1492e7),
SATURN (5.688e+26, 6.0268e7),
URANUS (8.686e+25, 2.5559e7),
NEPTUNE (1.024e+26, 2.4746e7);
private final double mass; // in kilograms
private final double radius; // in meters
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
private double mass() { return mass; }
private double radius() { return radius; }
// universal gravitational constant (m3 kg-1 s-2)
public static final double G = 6.67300E-11;
double surfaceGravity() {
return G * mass / (radius * radius);
}
double surfaceWeight(double otherMass) {
return otherMass * surfaceGravity();
}
public static void main(String[] args) {
if (args.length != 1) {
System.err.println("Usage: java Planet <earth_weight>");
System.exit(-1);
}
double earthWeight = Double.parseDouble(args[0]);
double mass = earthWeight/EARTH.surfaceGravity();
for (Planet p : Planet.values())
System.out.printf("Your weight on %s is %f%n",
p, p.surfaceWeight(mass));
}
}
public static final int SPRING = 0;
public static final int SUMMER = 1;
public static final int FALL = 2;
public static final int WINTER = 2;
public void printSeason(int seasonCode) {
String name = "";
if (seasonCode == SPRING) {
name = "Spring";
}
else if (seasonCode == SUMMER) {
name = "Summer";
}
else if (seasonCode == FALL) {
name = "Fall";
}
else if (seasonCode == WINTER) {
name = "Winter";
}
System.out.println("It is " + name + " now!");
}
printSeason(SPRING);
printSeason(WINTER);
printSeason(0);
printSeason(1);
printSeason(x - y);
printSeason(10000);
...
else if (seasonCode == WINTER) {
name = "Winter";
}
else {
throw new IllegalArgumentException();
}
System.out.println(name);
public enum Season {
SPRING("Spring"), SUMMER("Summer"), FALL("Fall"), WINTER("Winter");
private String name;
Season(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public void printSeason(Season season) {
System.out.println("It is " + season.getName() + " now!");
}
printSeason(Season.SPRING);
printSeason(Season.WINTER);
printSeason(Season.WHATEVER); <-- compile error
public enum Season {
SPRING("Spring"), SUMMER("Summer"), FALL("Fall"), WINTER("Winter"),
MYSEASON("My Season");
...
public class NAME
{
public static final String THUNNE = "";
public static final String SHAATA = "";
public static final String THULLU = "";
}
-------This can be replaced by--------
enum NAME{THUNNE, SHAATA, THULLU}