书上也不一定都对enum Size
{
SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LAGRGE("XL");
private String abbreviation;
private Size(String abbreviation)
{
this.abbreviation = abbreviation;
}
public String getAbbreviation()
{
return abbreviation;
}
}改成这个,注意你的20行多了个分号
{
SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LAGRGE("XL");
private String abbreviation;
private Size(String abbreviation)
{
this.abbreviation = abbreviation;
}
public String getAbbreviation()
{
return abbreviation;
}
}改成这个,注意你的20行多了个分号
书上确实是像您这样写的,是我把SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LAGRGE("XL");
private String abbreviation;
这两行换了行,因为我觉得先后没有关系,但实际上有关系,您能讲讲道理在哪里?还是说硬性这样规定?
public class Test
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
String input = in.next().toUpperCase();
Size size = Enum.valueOf(Size.class, input);
System.out.println("size = " + size);
}
}
enum Size
{
SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LAGRGE("XL");
private String abbreviation;//这句位置放这
private Size(String abbreviation)//这个地方分号去掉
{
this.abbreviation = abbreviation;
}
public String getAbbreviation()
{
return abbreviation;
}
}
确实像您说的那样改动后才正确。能说说道理吗?
枚举的构造方法必须是私有的 所以不可以new对象
要想有对象必须在他的内部实例化,用你这个例子来说吧
enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE};
就相当于new出N个Size对象 名分别为SMALL .....而且是静态的(不要问为什么,这是enum的特点)
而这个枚举类(看成特殊的类)的构造方法 需要穿进去一个String 所以new Size时需要传参数
在哪传呢? 就是这:SMALL("S") 。注意这里所讲的构造方法,构造方法要放在第一行。
确实像您说的那样改动后才正确。能说说道理吗?
枚举的构造方法必须是私有的 所以不可以new对象
要想有对象必须在他的内部实例化,用你这个例子来说吧
enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE};
就相当于new出N个Size对象 名分别为SMALL .....而且是静态的(不要问为什么,这是enum的特点)
而这个枚举类(看成特殊的类)的构造方法 需要穿进去一个String 所以new Size时需要传参数
在哪传呢? 就是这:SMALL("S") 。注意这里所讲的构造方法,构造方法要放在第一行。
SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LAGRGE("XL"); 这一句应该就是所谓的构造方法,所以放在第一行。希望对你有帮助。
书上确实是像您这样写的,是我把SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LAGRGE("XL");
private String abbreviation;
这两行换了行,因为我觉得先后没有关系,但实际上有关系,您能讲讲道理在哪里?还是说硬性这样规定?
枚举常量必须定义在类中第一行,这是java规范中定义的,具体的参见http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html这个链接
Each enum constant is declared with values for the mass and radius parameters. These values are passed to the constructor when the constant is created. Java requires that the constants be defined first, prior to any fields or methods. Also, when there are fields and methods, the list of enum constants must end with a semicolon.