class Sub {
static int y;
public static void foo() {
this.y = 10;
}
}
据我所知, this
代表调用该方法的对象和静态方法不绑定到任何物体。 但在上述情况中,变量y也是静态的。
如果我们能够类对象上调用静态方法,我们为什么不能让静态方法来设置类的静态变量。
这是什么额外的约束的目的是什么?
class Sub {
static int y;
public static void foo() {
this.y = 10;
}
}
据我所知, this
代表调用该方法的对象和静态方法不绑定到任何物体。 但在上述情况中,变量y也是静态的。
如果我们能够类对象上调用静态方法,我们为什么不能让静态方法来设置类的静态变量。
这是什么额外的约束的目的是什么?
因为this
是指对象实例。 有一个静态方法的调用没有对象实例。 当然,你可以访问你的静态字段(只有静态的!)。 只要使用
class Sub {
static int y;
public static void foo() {
y = 10;
}
}
如果你想确保你得到的静态字段y
并没有使用相同的名称一些局部变量,使用类名来指定:
class Sub {
static int y;
public static void foo(int y) {
Sub.y = y;
}
}
最主要的原因,为什么我们不能用“这个”静态方法方面: -
这一点: - “这”是指当前类对象,所以它明确表示,“这个”只来在画面中,一旦我们旨在创建一个类的对象。
静态方法: - 没有必要为了使用静态方法来创建一个对象。 意思是“实例”或对象创建不与“静态”任何意义按照Java规则。
所以会有矛盾,如果我们同时使用两者(静态和本)。 这是我们不能在静态方法“这个”使用的原因。
this
指的是该对象的这个实例Sub
。 作为该方法是static
,没有一个实例Sub
。
为了使你的代码编写工作是这样的:
class Sub {
static int y;
public static void foo() {
Sub.y = 10;
}
}
您可以在静态方法设置静态字段,但是你没有进入this
静态的方法,因为this
代表了对象的当前实例,并且在静态方法中,你有没有实例。
这意味着,“这个”对象,但没有一个。 在你的情况下,@tibtof建议你可以使用类名。
关键字“这”指的是你是操作的对象。 在你的情况下,这个任何非静态方法或构造函数里面(如果你有一个,如果你用“这个”内部的),然后在“这”指的是类的特定实例Sub.So它只适用时,对象被创建。 但是,在一个类的静态背景下任何东西,你可以使用,甚至没有创建该对象,因为它是在类加载过程中解决。 创建对象时,“这”只是解决了(你甚至可以说,对于动态哪个对象)。 因此,“这个”使静态上下文意义。 希望能帮助到你。 上帝保佑。
关键字“this”是仅在其中创建一个对象的一个实例适用。 而在静态方法没有创建实例,因为静态方法属于类区域。
我同意谁在我面前说其他人。 让我尝试在不同的方式来回答这个问题:
我想,实例方法/非静态方法属于一个类的实例(意思是我们迟早需要体REF访问它),这样的实例块或方法中的this关键字是有意义的。 但是static关键字类的任何成员被解释为直接资产类,如果存在则对象访问它。 因此,在静态情况下它不是确定对象存在的地方。 这就是为什么使用这里面的静态区域Java不允许。
当我们声明变量和方法是静态的,那么这是通过共享对象,其中该关键字仅指向当前对象间。 假设你已经创建类Foo则仅作出所有切丝(int y)对的一个副本的5个物object.so如果您访问INTŸ使用此关键字,然后编译器得到哪个对象有一点,因为静态INT y被共享的歧义所有对象。 你必须使用类名访问静态变量。