Soy muy nuevo en Java y quiero entender la diferencia entre las variables de clase y las variables de instancia.
Por ejemplo:
class Bicycle {
static int cadence = 0;
int speed = 0;
int gear = 1;
}
¿Cómo son las variables de instancia y las variables de clase diferentes entre sí? ¿Qué variables aquí son variables de clase y cuáles son variables de instancia? ¿Cómo afecta esto al alcance?

Respuestas:
Ambos son miembros variables , lo que significa que ambas están asociadas con una clase. Ahora, por supuesto, hay diferencias entre los dos:
Variables de instancia:
Estas variables pertenecen a la instancia de una clase , por lo tanto, un objeto. Y cada instancia de esa clase (objeto) tiene su propia copia de esa variable. Los cambios realizados en la variable no se reflejan en otras instancias de esa clase.
Variables de clase:
También se conocen como variables miembro estáticas y solo hay una copia de esa variable que se comparte con todas las instancias de esa clase. Si se realizan cambios en esa variable, todas las demás instancias verán el efecto de los cambios.
Ejemplo completo:
La salida será:
Ahora, cambie la variable de instancia a una variable de clase haciéndola estática:
Utilicé métodos no estáticos para obtener y establecer el valor de
Barcodepoder llamarlo desde el objeto y no desde la clase. La salida será la siguiente:fuente
Se explica aquí (con un ejemplo
Bicyclede clase con variables de clasenumberOfBicyclesvariables de instancia ycadence,speed,gearyid):Una variable de clase (declarada
static) es una ubicación común a todas las instancias.En el ejemplo,
numberOfBicycleses una variable de clase (ya que se declarastatic). Solo hay una de esas variables (es decir, ubicación) común a todas las instancias y a la clase. Entonces, si modificanumberOfBicyclesen un método, otros métodos verían el nuevo valor (incluso para diferentesBicycleobjetos)En contraste,
gear&idson variables de instancia (porque su declaración no tienestaticmodificador). CadaBicycleobjeto tiene su propio. Si modificagearpara algunaBicyclea , y si b es otra instancia, la modificacióna.gearno tiene efecto enb.gearCada objeto Java es una zona de memoria distinta con algunos metadatos (por ejemplo, alguna referencia a su clase) y sus propias variables de instancia (quizás heredadas de una superclase). Pero las variables de clase son comunes a la clase y compartidas por todas las instancias.
Ver también Objetos (ciencias de la computación) e wikipages variables de instancia.
fuente
Instancia variable:
La variable de instancia tiene un valor separado de cada instancia de la clase.
Variable de clase:
Y la variable de clase más importante mantiene un único valor compartido para todas las instancias de una clase, incluso si no existe ningún objeto de instancia de la clase.
Breve diferencia entre la variable de clase y la variable de instancia:
fuente
La diferencia entre
class variablesyinstancevariables, es simplemente una cuestión dewho knows what?.Un
instance variablesólo es conocida (= obligado ) para que el hormigón ejemplo - de ahí el nombre.La definición de una clase es como un plano para construir objetos concretos . Quizás este punto te confunda un poco. Pero escribiéndolo de esta manera, cada variable estaría vinculada a su objeto concreto: por ejemplo, cada persona tiene su propio nombre
A,
class variablepor otro lado, es, como su nombre lo indica, conocido por todos y cada uno de los miembros de una clase; o técnicamente: es conocido / vinculado a nivel de clase . El ejemplo típico es un contador de cuántos objetos ha creado, aunque es un ejemplo muy problemático; pero eso no importa en esta etapa temprana.numberOfPersonsse declarastaticcuál es la palabra clave para distingush entreclass variablesyinstance variabes. La variable se declara como las demás dentro de la definición de clase. Pero lastaticpalabra clave indica que es diferente.firstName,lastNameson variables de instancia y están vinculadas a esa instancia concretanumberOfPersonsestá vinculado a la clase, de modo que cada instancia pueda acceder a esta variable.tl; dr
El lugar donde se definen las variables es la definición de clase.
Las variables de clase se conocen en / vinculadas al nivel de clase, es decir, cada instancia concreta tiene acceso a ella. Para definir una variable de clase, usa la palabra clave
static.Las variables de instancia solo se conocen a nivel de instancia. Los define sin la
staticpalabra clave.Más documentación para Java está aquí
fuente