为什么这不能用在Java类的main方法中?

时间:2014-01-20 02:44:23

标签: java

我已经使用Java大约六个月了但是我对this语句的确切工作原理有点不知所措。我知道它用于引用调用实例。但是为什么不需要在main方法中使用它来引用在main方法中创建的对象?

我认为这总是指的是优先于其他对象的当前对象。在构造函数中,这是为了创建新对象,正确。在main方法中,this.x.method指的是主语句中的对象。

问题: this 关键字是指当前正在创建的对象?或者是否指的是被制作成新对象的对象?

类:

public class DDHThisTest {
    public int x = 0;
    public int y = 0;

    public DDHThisTest(int a, int b) {
        this.x = a;
        this.y = b;
    }

    public static void main(String[] args) {
        DDHThisTest i = new DDHThisTest();
        this.i.x = 10;

    }
}

错误:

  

不能在静态上下文中使用它

6 个答案:

答案 0 :(得分:3)

您无法使用this.i.x,因为您无法在static方法中引用实例变量,在本例中为main()。要解决此问题,只需删除this之前的i.x

public static void main(String[] args)
{
    DDHThisTest i = new DDHThisTest(1, 2);
    i.x = 10;
}

注意:在创建DDHThisTest的实例时,不要忘记将参数传递给构造函数,因为您尚未声明没有参数的构造函数。

答案 1 :(得分:2)

当您在static块中时,您没有对象范围。这意味着没有您正在使用的类的特定实例,因此没有引用“此类的实例”。

答案 2 :(得分:2)

Main是一个静态方法,在创建DDHThisTest类的对象之前调用它。所以ypu正在尝试ro引用一个尚未实例化的类的实例。所以你得到了错误。换句话说,您知道只能从静态方法访问静态变量。但是'this'是一个实例变量,所以说;因为你无法从静态方法访问它。

答案 3 :(得分:2)

main方法是一种静态方法。 关键字this将用于对象/实例范围,而不是静态块中。

只需将this.i.x = 10;替换为i.x = 10;,您就可以了。

答案 4 :(得分:1)

i.x = 10;

在静态功能中,没有this

答案 5 :(得分:1)

关键字“this”保留用作实例的一部分。 如果你删除“this。”,你应该没事。