为什么我们不能在静态方法中使用’this’关键字

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; } } 

我们不能在静态方法上下文中使用“this”的主要原因: –

这个: – “this”表示当前的类OBJECT,所以很明显,只要我们打算创建该类的Object,“this”才会出现在图片中。

静态方法: – 不需要创建对象以使用静态方法。 根据Java规则,“实例”或对象创建对“静态”没有任何意义。

所以如果我们同时使用它们(静态和这个)会有矛盾。 这就是我们不能在静态方法中使用“this”的原因。

this是指对象Sub这个实例。 由于该方法是static ,因此没有Sub的实例。

为了让您的代码工作,请按以下方式编写:

 class Sub { static int y; public static void foo() { Sub.y = 10; } } 

您可以在静态方法中设置静态字段,但是您无法在静态方法中访问this ,因为this表示对象的当前实例,而在静态方法中您没有实例。

这意味着“这个”对象,但没有一个。 在您的情况下,您可以使用类名称@tibtof建议。

关键字“this”指的是您正在操作的对象。 在你的情况下,这里面的任何非静态方法或构造函数(如果你有一个,如果你在其中使用“this”),那么“this”指的是Sub.So类的特定实例。它仅适用于对象已创建。 但是在类的静态上下文中的任何东西,你都可以在没有为它创建对象的情况下使用它,因为它在类加载期间被解析。 “this”仅在创建对象时解析(您甚至可以动态地说明哪个对象)。 所以“这个”在静态环境中是有意义的。 希望能帮助到你。 上帝保佑。

“this”关键字仅适用于创建对象实例的情况。 并且在静态方法中没有创建实例,因为静态方法属于类区域。

我同意在我之前回复的所有其他人。 让我以不同的方式尝试回答这个问题:

我想,实例方法/非静态方法属于一个类的实例(意味着迟早我们需要对象引用它来访问它)所以这个关键字在实例块或方法中是有意义的。 但是,对类的任何成员的静态关键字被解释为对类的直接资产,如果存在对象,则该对象可以访问它。 所以在静态上下文中,它不确定对象是否存在于某个地方。 这就是为什么在java中不允许使用这个内部静态区域。

当我们声明变量并且方法是静态的时候,这是在该关键字仅指向当前对象的对象之间共享。 假设您创建了五个类foo的对象,那么只有一个由(int y)组成的副本被所有对象粉碎。如果使用此关键字访问int,则编译器会产生歧义,该对象必须指向,因为静态int是共享的所有对象。 您可以使用类名访问静态变量。