为什么我能够以静态方法打印此字段?

Geo*_*rge 5 java eclipse anonymous-class

public class Main {
    private final int value = 3;

    public static Runnable buildRunner() {
        return new Runnable() {

            @Override
            public void run() {
                System.out.println(Main.this.value);
            }
        };

    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用Eclipse Kepler和JRE 7.

buildRunner方法中 - 为什么我能看到thisMain的?静态方法中Main的'this'是什么?为什么编译?

如果value是最终的,我只能这样做.我不能调用Main和stuff的实例方法,但是值不是十分贬值的static!此外,如果我想在使用buildRunner方法,外面run的方法new Runnable,编译器将停止从我做那.

Boa*_*ann 4

JLS \xc2\xa7 15.8.4表示“该形式的表达式的值TypeName.this是第n个词法封闭实例this”。由于您的示例中没有Main 的封闭实例,因此代码无效。

\n\n

在 javac 中,代码会产生错误“this无法从静态上下文引用非静态变量”。它在 Eclipse 中编译的事实似乎是 Eclipse(它有自己的编译器)中的一个不起眼的错误。

\n

  • 它不仅仅是完成。它*运行*并打印出 3。 (2认同)