¿Por qué no podemos usar la palabra clave ‘this’ en un método estático?

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

Entiendo que this representa el objeto que invoca el método y que los métodos estáticos no están vinculados a ningún objeto. Pero en el caso mencionado anteriormente, la variable y también es estática.

Si podemos invocar el método estático en el objeto de clase, ¿por qué no podemos permitir que los métodos estáticos establezcan las variables estáticas de la clase?

¿Cuál es el propósito de esta restricción adicional?

    Porque this refiere a la instancia del objeto. No hay instancia de objeto en una llamada de un método estático. Pero, por supuesto, puedes acceder a tu campo estático (¡solo los estáticos!). Solo usa

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

    Si quiere asegurarse de obtener el campo estático y y no alguna variable local con el mismo nombre, use el nombre de la clase para especificar:

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

    La razón principal por la que no podemos usar “esto” en el contexto del método estático: –

    esto: – “esto” significa OBJETO de clase actual, por lo que es claro que “esto” solo aparece en la imagen una vez que intentamos crear un Objeto de esa clase.

    método estático: no es necesario crear un objeto para usar el método estático. significa “instancia” o creación de objeto no tiene sentido con “estático” según la regla de Java.

    Entonces, habría una contradicción si usamos ambas cosas juntas (estático y esto). Esa es la razón por la que no podemos usar “esto” en el método estático.

    this se refiere a esta instancia del objeto Sub . Como el método es static , no hay una instancia de Sub .

    Para que su código funcione, escríbalo así:

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

    Puede establecer campos estáticos en métodos estáticos, pero no tiene acceso a this en método estático porque representa la instancia actual del objeto y en un método estático no tiene instancia.

    Esto significa “este” objeto pero no hay uno. En su caso, puede usar el nombre de la clase como lo sugiere @tibtof.

    La palabra clave “this” se refiere al objeto con el que se opera. En su caso esto dentro de cualquier método o constructor no estático (si tiene uno y si usa “this” dentro de eso), entonces “this” se refiere a esa instancia particular de la clase Sub.So solo es aplicable cuando el el objeto es creado Pero cualquier cosa en el contexto estático de una clase, puede usar sin siquiera crear un objeto para eso, ya que se resuelve durante la carga de la clase. “esto” se resuelve solo cuando se crea el objeto (incluso se puede decir dinámicamente para qué objeto). Entonces, “esto” tiene sentido en un contexto estático. Espero eso ayude. Dios bendiga.

    La palabra clave “this” solo se aplica cuando se crea una instancia de un objeto. Y en el método estático, no se crea ninguna instancia porque el método estático pertenece al área de clase.

    Estoy de acuerdo con todas las demás personas que respondieron antes que yo. Déjame intentarlo de otra manera para responder esto:

    Supongo que el método de instancia / método no estático pertenece a la instancia de una clase (lo que significa que antes o después necesitamos ref de objeto para acceder a él), por lo que esta palabra clave tiene sentido dentro del bloque o método de instancia. Pero la palabra clave estática para cualquier miembro de una clase se interpreta como un activo directo para la clase que un objeto si existió y luego tiene acceso a él. Entonces, en un contexto estático, no es seguro que el objeto exista en algún lugar. Es por eso que usar este área estática interna no está permitido en Java.

    cuando declaramos la variable y el método es estático, se comparte entre los objetos donde esta palabra clave solo apunta al objeto actual. supongamos que ha creado cinco objetos de clase foo, entonces solo una copia de hizo de (int y) triturado por todos los objetos.so si accede a int y usando esta palabra clave, entonces el comstackdor obtiene una ambigüedad que el objeto debe señalar porque está compartida la integridad estática por todos los objetos. tienes acceso a la variable estática usando el nombre de la clase.