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
Barcode
poder llamarlo desde el objeto y no desde la clase. La salida será la siguiente:fuente
Se explica aquí (con un ejemplo
Bicycle
de clase con variables de clasenumberOfBicycles
variables de instancia ycadence
,speed
,gear
yid
):Una variable de clase (declarada
static
) es una ubicación común a todas las instancias.En el ejemplo,
numberOfBicycles
es 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 modificanumberOfBicycles
en un método, otros métodos verían el nuevo valor (incluso para diferentesBicycle
objetos)En contraste,
gear
&id
son variables de instancia (porque su declaración no tienestatic
modificador). CadaBicycle
objeto tiene su propio. Si modificagear
para algunaBicycle
a , y si b es otra instancia, la modificacióna.gear
no tiene efecto enb.gear
Cada 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 variables
yinstance
variables, es simplemente una cuestión dewho knows what?
.Un
instance variable
só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 variable
por 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.numberOfPersons
se declarastatic
cuál es la palabra clave para distingush entreclass variables
yinstance variabes
. La variable se declara como las demás dentro de la definición de clase. Pero lastatic
palabra clave indica que es diferente.firstName
,lastName
son variables de instancia y están vinculadas a esa instancia concretanumberOfPersons
está 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
static
palabra clave.Más documentación para Java está aquí
fuente