为什么我要添加“静态”

时间:2014-06-11 04:36:32

标签: java class oop static enums

我有静态问题,这个程序不能编译。编译器说

Enums.java:27: non-static variable this cannot be referenced from a static context
        SexEnum a = new SexEnum(Sex.MALE);
                    ^
Enums.java:28: non-static variable this cannot be referenced from a static context
        SexEnum b = new SexEnum(Sex.FEMALE);

但是,如果我在下一行添加“静态”关键字,一切都会好起来的。

public static class SexEnum{

/////////////////////////////////////////////// /////////////////////////////////////

public class Enums{
        enum Sex{MALE, FEMALE};

        public class SexEnum{          // something wrong this line
            private Sex sex;

            public SexEnum(Sex sex){
                this.sex = sex;

            }
            public void info(){
                Sex s = this.sex;
                switch(s){
                    case MALE:
                        System.out.println("I'm a male.");
                        break;
                    case FEMALE:    
                        System.out.println("I'm a female.");
                        break;
                    default:
                        System.out.println("I'm not a human.");
                        break;
                }
            }
        }
        public static void main(String[] argv){
            SexEnum a = new SexEnum(Sex.MALE);
            SexEnum b = new SexEnum(Sex.FEMALE);
            a.info();
            b.info();
        }
    }

有人可以向我解释一下吗?谢谢。

2 个答案:

答案 0 :(得分:3)

我认为您可以通过将info方法转换为enum而不是创建包装类来消除所有问题:

public class Enums{
    public enum Sex {
        MALE, FEMALE;

        public void info(){
            System.out.printf("I'm a %s.%n", this.toString().toLowerCase());
        }
    }

    public static void main(String[] argv){
        Sex a = Sex.MALE;
        Sex b = Sex.FEMALE;
        a.info();
        b.info();
    }
}

Java枚举也是类,因此您可以添加方法,字段等。

答案 1 :(得分:0)

问题在于你试图实现一个内部类,只有从上层的instanciated对象中执行它才能实现。 但是如果类是静态的,它不依赖于上层类,并且任何其他对象都可以实现它。