我已经使用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;
}
}
错误:
不能在静态上下文中使用它
答案 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。”,你应该没事。