24

你能帮我用下面的代码吗?错误是:“不能在静态上下文中使用它”

public class Sample2 {
    /**
     * @param args
     */
    public static void main(String[] args) 
    {
        Sample2 sam=new Sample2();  

        //Below code works fine
        System.out.println(sam);

        //Below code is displaying error
        System.out.println(this);
    }
}
4

5 回答 5

34

请参阅,“this”关键字是指当前对象,因为哪个方法正在执行中。因为,您不能使用类的实例调用静态方法。这就是为什么在上面的示例中不能在静态方法中使用“this”,因为它试图打印根本没有创建的当前实例。所以,我认为这就是你得到编译时错误的原因。

于 2013-05-01T09:23:03.153 回答
18

他们关键字this是指类的实例。在静态上下文中,您没有实例,因此您无法引用它。

有关更多信息,请参阅此答案:Java 中“this”的含义是什么?

于 2013-05-01T09:10:23.907 回答
3

在 java 中,您不能在静态方法(静态上下文)中使用它。

Static方法不指向封闭类的任何实例。

静态方法无论如何都不能引用“this”或“super”关键字

参考这个关键字的官方文档

于 2013-05-01T09:09:20.670 回答
2

如果我们尝试从静态上下文中访问它,编译器无法猜测您指的是哪个实例。main 在这里是一个静态方法。

于 2014-06-05T20:49:18.937 回答
0

写这意味着在静态上下文中我们期望返回对象的地址。虽然拥有一个调用静态方法的对象是完全合法的,但这不是一种义务。因此,如果没有为类创建对象,编译器就会停止任何错误的可能性。

于 2018-12-25T13:31:33.407 回答