variable usar una sirve restricción que para métodos metodos metodo estáticos estaticos estatico diferencia definicion cuando clase atributos java methods static instance-variables access-modifiers

java - usar - Pueden los métodos no estáticos modificar variables estáticas



public static java (9)

He encontrado esto en los tutoriales de Java

  • Los métodos de instancia pueden acceder a las variables de instancia y los métodos de instancia directamente.
  • Los métodos de instancia pueden acceder a las variables de clase y los métodos de clase directamente.
  • Los métodos de clase pueden acceder a las variables de clase y los métodos de clase directamente.
  • Los métodos de clase no pueden acceder directamente a las variables de instancia o los métodos de instancia; deben usar una referencia de objeto. Además, los métodos de clase no pueden usar esta palabra clave ya que no hay una instancia a la que se pueda referir.

Entonces la respuesta es sí, los métodos no estáticos PUEDEN modificar las variables estáticas

Me pregunto cómo un método no estático puede modificar una variable de instancia estática. Sé que los métodos estáticos solo pueden acceder a otros métodos estáticos y variables estáticas. Sin embargo, ¿es cierto el otro lado? ¿Pueden los métodos no estáticos acceder solo a variables no estáticas? Por ejemplo:

public class SampleClass { private static int currentCount = 0; public SampleClass() { currentCount++; } public void increaseCount() { currentCount++; } }

Este código se compila y me gustaría saber por qué en términos de privilegios de acceso estático.


Las variables estáticas son variables de clase no instancia o variable local. Es por eso que también podemos usar una variable estática en un método no estático. y las variables estáticas no son por objeto. Las variables estáticas tienen una copia que se utilizará en todo el programa.


Los métodos estáticos no pueden modificar los campos no estáticos ya que: para usar un campo no estático (fuera de la clase) debe crear una instancia de un objeto de clase, pero para usar un método estático no hay necesidad de crear instancias de objetos. Esta es la razón por la que no es razonable que un Método no estático (que no exige una creación de instancias de objeto) modifique un campo que debe ser instanciado.

Para esto: los métodos estáticos solo pueden tocar campos estáticos (o llamar a otros métodos estáticos).

Pero como mencionó, es posible que ocurra lo contrario, un método no estático puede modificar un campo estático que es estático para todos los objetos de su clase.


Los métodos no estáticos pueden acceder a variables estáticas. Los métodos estáticos solo pueden acceder a variables o métodos estáticos directamente sin crear object.ex: public static void main (String arg [])


Los miembros estáticos no son miembros de instancia, estos se comparten por clase, por lo que básicamente cualquier método de instancia puede acceder a estos miembros estáticos.


Míralo de esta manera. Se puede acceder a una variable estática de muchas maneras. Uno de los más comunes es preceder el nombre var con el nombre de la clase, ya que los vars estáticos son por clase. Como se refiere a esta variable en la misma clase, está exento de tener que precederla con el nombre de la clase. No importa donde se llame la variable estática. También esta es una var estática privada que no es accesible por ninguna otra clase.


No, cualquier método no estático tiene acceso a miembros estáticos. La única forma en que esto sería falso es si el contexto no estático no tuviera acceso al miembro estático (por ejemplo, el miembro estático es privado para una clase y el código no estático no está en esa clase). existen variables estáticas para proporcionar una variable / método libre de instancia, por ejemplo, si tenemos una clase de Juego y una variable de puntuación más alta, la puntuación más alta sería estática (accesible sin una instancia), y después de cada juego (una instancia de la clase de Juego) Completa, podríamos alterar la puntuación más alta de nuestro contexto no estático si nuestra puntuación es mayor que la puntuación más alta.


Sí, un método estático puede acceder a una variable no estática. Esto se hace creando un objeto para la clase y accediendo a la variable a través del objeto. En el siguiente ejemplo, main es un método estático que accede a la variable a que es una variable no estática.

código demo:

public class Sample { private int a; void method() { System.out.println("i am a private method"); } public static void main(String[] args) { Sample sample=new Sample(); sample.a=10; System.out.println(sample.a); } }


Los métodos no estáticos pueden acceder tanto a variables estáticas como a métodos estáticos como miembros de clase

Código demo

public class Static_Class { protected static String str; private static int runningLoop; static{ str = "Static Block"; } /** * Non-Static Method Accessing Static Member */ public void modifyStaticMember(){ str = "Non-Static Method"; } /** * Non-Static Method invoking Static Method */ public void invokeStaticMethod(){ String[] args = {}; if(runningLoop == 0){ runningLoop++; main(args); } //Exiting as it will lead to java.lang.Error System.exit(0); } public static void main(String[] args) { Static_Class instance = new Static_Class(); System.out.println(str); instance.modifyStaticMember(); // Changed Value persists System.out.println(str); //Invoking Static Method instance.invokeStaticMethod(); } }