0

对于不知道如何更好地陈述这个问题,我提前道歉。

在下面的程序中,如果我在 NetBeans 中运行它会出错。它使用枚举,当我使用“this”关键字时,它似乎不喜欢它。代码:

enum moreEnum{
   JOHN(10,"nice"),
   TONY(20,"cool");

   String desc;
   int myNum;

   moreEnum (int a, String desc){  
       myNum = a;
       this.desc = desc;  
   }

   public String getDesc(){
       return desc;
   }

   public static void main (String [] args){
       System.out.printf("%s \t %s \n", moreEnum.JOHN, moreEnum.JOHN.desc);
       System.out.printf("getDesc() method - %s", moreEnum.JOHN.getDesc());
   }
}

当我运行它时,我会得到这个错误:

java.lang.VerifyError: Constructor must call super() or this() before return in method moreEnum.<init>(Ljava/lang/String;ILjava/lang/String;)V at offset 0
    at java.lang.Class.getDeclaredMethods0(Native Method)
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2442)
    at java.lang.Class.getMethod0(Class.java:2685)
    at java.lang.Class.getMethod(Class.java:1620)
    at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:488)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:480)
        Exception in thread "main" Java Result: 1

如果我改变线的位置: this.desc = desc; 到 myNum = a 的正上方;,然后它会运行良好。如果我把 this.desc = desc; 回到我移动它的地方(使程序我第一次运行它的方式相同),我将不再有错误。如果我然后将“desc”变量更改为其他任何内容,我将再次收到错误,并且可以通过切换“this”行的位置来解决它,运行它没有错误,然后将它切换回来然后它'会运行良好。

我想我的问题是真的,“发生了什么事?!” 这是枚举问题吗?'这个问题?还是 NetBeans 问题?

4

1 回答 1

1

这可能是 Netbeans 的缓存问题?不幸的是,我无法在 Eclipse (JDK 1.7) 中重现这一点。也许在编译/运行之前尝试清理项目?

于 2012-06-25T18:55:10.333 回答