Jeg er veldig ny i Java og ønsker å forstå forskjellen mellom klassevariabler og instansvariabler.
For eksempel:
class Bicycle {
static int cadence = 0;
int speed = 0;
int gear = 1;
}
Hva er forskjellen på instansvariabler og klassevariabler? Hvilke variabler her er klassevariabler, og hvilke er instansvariabler? Hvordan påvirker dette omfanget?
Begge er medlemsvariabler, noe som betyr at begge er knyttet til en klasse. Nå er det selvfølgelig forskjeller mellom de to:
**Instansvariabler
Disse variablene tilhører instansen av en klasse, altså et objekt. Og hver forekomst av klassen (objektet) har sin egen kopi av variabelen. Endringer som gjøres i variabelen, gjenspeiles ikke i andre forekomster av klassen.
public class Product {
public int Barcode;
}
Klassevariabler:
Disse er også kjent som statiske medlemsvariabler, og det finnes bare én kopi av denne variabelen som deles med alle forekomster av klassen. Hvis det gjøres endringer i denne variabelen, vil alle andre instanser se effekten av endringene.
public class Product {
public static int Barcode;
}
Fullstendig eksempel:
// INSTANCE VARIABLE
public class Main {
public static void main(String[] args) {
Product prod1 = new Product();
prod1.Barcode = 123456;
Product prod2 = new Product();
prod2.Barcode = 987654;
System.out.println(prod1.Barcode);
System.out.println(prod2.Barcode);
}
}
public class Product {
public int Barcode;
}
Resultatet blir:
123456
987654
Nå endrer du forekomstvariabelen til en klassevariabel ved å gjøre den statisk:
//CLASS VARIABLE
public class Main {
public static void main(String[] args) {
Product prod1 = new Product();
prod1.setBarcode(123456);
Product prod2 = new Product();
prod2.setBarcode(987654);
System.out.println(prod1.getBarcode());
System.out.println(prod2.getBarcode());
}
}
public class Product {
public static int Barcode;
public int getBarcode() {
return Barcode;
}
public void setBarcode(int value){
Barcode = value;
}
}
Jeg brukte ikke-statiske metoder for å hente og angi verdien til Barcode
for å kunne kalle den fra objektet og ikke fra klassen. Resultatet blir som følger:
987654
987654
Det forklares her (med et eksempel på klassen Bicycle
med klassevariabelen numberOfBicycles
og instansvariablene cadence
, speed
, gear
& id
):
Noen ganger ønsker man å ha variabler som er felles for alle objekter. Dette gjøres med modifikatoren
static
. Felt som har modifikatorenstatic
i deklarasjonen, kalles statiske felt eller klassevariabler. De er knyttet til klassen, og ikke til et hvilket som helst objekt. Alle forekomster av klassen deler en klassevariabel, som ligger på en fast plass i minnet. Ethvert objekt kan endre verdien til en klassevariabel, men klassevariabler kan også manipuleres uten å opprette en forekomst av klassen.
En klassevariabel (deklarert static
) er en plassering som er felles for alle forekomster.
I eksemplet er numberOfBicycles
en klassevariabel (siden den er erklært static
). Det finnes bare én slik variabel (dvs. plassering) som er felles for alle instanser og for klassen. Så hvis du endrer numberOfBicycles
i én metode, vil andre metoder se den nye verdien (selv for forskjellige Bicycle
-objekter).
I motsetning til dette er gear
& id
instans-variabler (fordi deklarasjonen deres ikke har noen statisk
modifikator). Hvert Bicycle
-objekt har sin egen. Hvis du endrer gear
for en Bicycle
a, og hvis b er en annen instans, vil det å endre a.gear
ikke ha noen innvirkning på b.gear
.
Hvert Java-objekt er en egen minnesone med noen metadata (f.eks. en referanse til sin klasse) og sine egne instansvariabler (kanskje arvet fra en superklasse). Men klassevariablene er felles for klassen og deles av alle instanser.
Se også wikisidene Objekt (informatikk) & Instansvariabel.
Instansvariabel:
Instansvariabler deklareres i en klasse, men utenfor en metode, konstruktør eller en blokk.
Forekomstvariabel tilhører forekomsten av en klasse, eller man kan si at eller man kan si at instansvariabelen tilhører objektet.
Instansvariabler har en egen verdi for hver forekomst av klassen. klassen.
Klasse InstanceDemo {
// Denne instansvariabelen er synlig for alle underordnede klasser.
public String name = "Testing";
// count-variabelen er bare synlig i klassen Demo.
private int count = 2;
}
Metode for å få tilgang til forekomstvariabel:
InstanceDemo demo = new InstanceDemo ();
System.out.println("Access Instance variable: " + demo.count + " , "+demo.name );
Output: 2 , Testing
Klassevariabel:
Klassevariabel tilhører klassen.
klassevariabel opprettes ved å legge til nøkkelordet "static" før variabelen. variabelen.
Kalles også statisk variabel.
Og viktigst av alt, klassevariabler opprettholder én felles verdi for alle alle forekomster av en klasse, selv om det ikke finnes noe objekt av klassen. eksisterer.
Klasse ClassDemo {
// count-variabelen er den samme for alle forekomster av denne klassen
public static int count = 2;
}
Metode for å få tilgang til klassevariabel:
System.out.println("Få tilgang til klassevariabel: " + ClassDemo.count ); //klassevariabel refereres direkte med klassenavn
Output: 2
Kort om forskjellen mellom klassevariabel og instansvariabel:.