书上也不一定都对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行多了个分号

解决方案 »

  1.   

    第18行的方法JDK里面是没有的,除非楼主引用了其它的jar包,如果是这样的话,那么楼主编译的时候需要加入导入的jar包第16行是什么写法?我没见过...不过16行的语法肯定是通不过的第20行是方法定义和实现,既然有实现的话,那么就定义方法后就不需要分号;了,把最后一个分号去掉。
      

  2.   


    书上确实是像您这样写的,是我把SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LAGRGE("XL");  
            private String abbreviation;
    这两行换了行,因为我觉得先后没有关系,但实际上有关系,您能讲讲道理在哪里?还是说硬性这样规定?
      

  3.   

    import java.util.*;
     
    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;    
            }
                     
    }
     
      

  4.   


    确实像您说的那样改动后才正确。能说说道理吗?
    枚举的构造方法必须是私有的  所以不可以new对象 
     
    要想有对象必须在他的内部实例化,用你这个例子来说吧 
    enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE}; 
    就相当于new出N个Size对象  名分别为SMALL .....而且是静态的(不要问为什么,这是enum的特点) 
    而这个枚举类(看成特殊的类)的构造方法  需要穿进去一个String  所以new Size时需要传参数 
    在哪传呢?  就是这:SMALL("S")    。注意这里所讲的构造方法,构造方法要放在第一行。
      

  5.   


    确实像您说的那样改动后才正确。能说说道理吗?
    枚举的构造方法必须是私有的  所以不可以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"); 这一句应该就是所谓的构造方法,所以放在第一行。希望对你有帮助。   
      

  6.   


    书上确实是像您这样写的,是我把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.