我正在查看我的书中提供的示例代码
enum Coin
{
PENNY(1),
NICKEL(5),
DIME(10),
QUARTER(25);
private final int denomValue;
Coin(int denomValue)
{
this.denomValue = denomValue;
}
int denomValue()
{
return denomValue;
}
int toDenomination(int numPennies)
{
return numPennies / denomValue;
}
}
public class Coins
{
public static void main(String[] args)
{
if (args.length == 1)
{
int numPennies = Integer.parseInt(args[0]);
System.out.println(numPennies + " pennies is equivalent to:");
int numQuarters = Coin.QUARTER.toDenomination(numPennies);
System.out.println(numQuarters + " " + Coin.QUARTER.toString() +
(numQuarters != 1 ? "s," : ","));
numPennies -= numQuarters * Coin.QUARTER.denomValue();
int numDimes = Coin.DIME.toDenomination(numPennies);
System.out.println(numDimes + " " + Coin.DIME.toString() +
(numDimes != 1 ? "s, " : ","));
numPennies -= numDimes * Coin.DIME.denomValue();
int numNickels = Coin.NICKEL.toDenomination(numPennies);
System.out.println(numNickels + " " + Coin.NICKEL.toString() +
(numNickels != 1 ? "s, " : ", and"));
numPennies -= numNickels*Coin.NICKEL.denomValue();
System.out.println(numPennies + " " + Coin.PENNY.toString() +
(numPennies != 1 ? "s" : ""));
}
System.out.println();
System.out.println("Denomination values:");
for (int i = 0; i < Coin.values().length; i++)
System.out.println(Coin.values()[i].denomValue());
}
}
如果enum就像一个类,是否可以为类中的方法和字段赋予相同的名称,就像在这里使用denomValue一样?
为什么以这种方式调用int numQuarters = Coin.QUARTER.toDenomination(numPennies);
? toDenomination()
默认是静态的吗?
在上面的例子中,denomValue字段的值是多少?该程序的输出提示它应该等于QUARTER。但是这有什么作用呢? Coin.QUARTER是否相当于创建一个硬币对象并传递QUARTER作为它的构造函数参数?
答案 0 :(得分:6)
PENNY
,NICKEL
中的每一个都是Coin
类的实例,并且是静态的,因此可以Coin.PENNY
访问它们。
所以当你这样做时:
Coin.QUARTER.toDenomination(numPennies)
您正在访问硬币类的QUARTER
实例并调用其toDenomination()
方法,该方法是在QUARTER
实例上调用的实例方法。
当你这样做时:
PENNY(1) //this actually calls the constructor with one integer argument of Coin class
检查PENNY是Coin
类的实例:
System.out.println(Coin.PENNY.getClass()); //Will show you Coin
答案 1 :(得分:1)
Enum
是特殊类:
因此Enum
有私有构造函数的原因。
获得值后,可以像普通类一样访问声明的方法和属性。
denomValue
的值取决于Enum
枚举中声明的Coin
值。例如:PENNY
枚举denomValue
为1
,且始终为1
。