Hva er forskjellen mellom klassevariabler og instansvariabler i Java?
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?
15
3
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.
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.
Fullstendig eksempel:
Resultatet blir:
Nå endrer du forekomstvariabelen til en klassevariabel ved å gjøre den statisk:
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:Det forklares her (med et eksempel på klassen
Bicycle
med klassevariabelennumberOfBicycles
og instansvariablenecadence
,speed
,gear
&id
):En klassevariabel (deklarert
static
) er en plassering som er felles for alle forekomster.I eksemplet er
numberOfBicycles
en klassevariabel (siden den er erklærtstatic
). Det finnes bare én slik variabel (dvs. plassering) som er felles for alle instanser og for klassen. Så hvis du endrernumberOfBicycles
i én metode, vil andre metoder se den nye verdien (selv for forskjelligeBicycle
-objekter).I motsetning til dette er
gear
&id
instans-variabler (fordi deklarasjonen deres ikke har noenstatisk
modifikator). HvertBicycle
-objekt har sin egen. Hvis du endrergear
for enBicycle
a, og hvis b er en annen instans, vil det å endrea.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.
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.
Kort om forskjellen mellom klassevariabel og instansvariabel:.