java程序没有编译,问题的范围和变量的生命周期

时间:2014-06-20 08:32:38

标签: java

我是java的新手。任何人都可以解释为什么以下程序不起作用?感谢。

class AnonymousInnerClassInMethod
{
    public static void main(String[] args)
    {
        int local = 1;

        Comparable compare = new Comparable ()
        {
            public int compareTo(Object value)
            {
                return (Integer)value - local;
            }
        };
        System.out.println(compare.compareTo(5)); 
    }
}

2 个答案:

答案 0 :(得分:0)

您必须将local声明为final

final int local = 1;

(有关this question的此事的更多信息,如 sp00m 所示。)

或者将其定义为班级的static字段:

class AnonymousInnerClassInMethod {
    private static int local = 1;
    …
}

答案 1 :(得分:0)

第一个问题:您不能在嵌套类中声明public static void main(String[] args),除非您将该类标记为static

第二个问题:用于定义比较的compareTo方法的匿名构造函数无法访问非最终变量local。这是一个错误,因为变量可能在构造对象期间/之后发生变化。因此,如果将其标记为final,则确保变量无法更改。