Vilka är skillnaderna mellan klassvariabler och instansvariabler i Java? [stängd]
On januari 1, 2021 by adminKommentarer
- Du verkar ha börjat läsa Java ™ -handledningarna: Förstå klassmedlemmar som förklarar detta, men har inte ' t helt förstått det.
Svar
De är båda medlem -variabler, vilket betyder att båda är associerade med en klass. Nu är det naturligtvis skillnader mellan de två:
Instansvariabler:
Dessa variabler tillhör förekomsten av en klass och därmed ett objekt. Och varje förekomst av den klassen (objektet) har sin egen kopia av den variabeln. Ändringar som gjorts i variabeln återspeglar inte i andra fall av den klassen.
public class Product { public int Barcode; }
Klassvariabler:
Dessa kallas också statiska medlemsvariabler och det finns bara en kopia av den variabeln som delas med alla instanser i den klassen. Om ändringar görs till den variabeln kommer alla andra instanser att se effekten av ändringarna.
public class Product { public static int Barcode; }
Fullständigt exempel:
// 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; }
Utmatningen blir:
123456
987654
Ändra nu instansvariabeln till en klassvariabel genom att göra 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; } }
Jag använde icke-statiska metoder för att få och ställ in värdet för Barcode
för att kunna kalla det från objektet och inte fr om klassen. Utgången kommer att följa:
987654
987654
Kommentarer
- Varför ett C # -exempel för en Java-fråga?
- Mina tankar exakt. Jag vet bara Java-programmering inte C #, så du har inte varit till stor hjälp
- @ BasileStarynkevitch I ' är huvudsakligen en C # -utvecklare och eftersom principen räknas för båda och är lika bra som densamma gav jag snabbt en C # till exempel fel av mig självklart. 🙂 Ändrade mitt exempel till Java.
- @SkylarAdams Tyvärr antog jag fel för snabbt att alla som känner till Java känner till C #. Jag ändrade exemplet till en Java, hoppas att det hjälper.
- För den här typen av frågor tycker jag att det är irrelevant, oavsett om du använder Java eller C #,
Svar
Det förklaras här (med ett exempel Bicycle
klass med klassvariabel numberOfBicycles
och instansvariabler cadence
, speed
, gear
& id
):
Ibland vill du ha variabler som är gemensamma för alla objekt. Detta uppnås med
static
modifieraren. Fält som harstatic
modifieraren i sin deklaration kallas statiska fält eller klassvariabler. De är associerade med klassen snarare än med något objekt. Varje förekomst av klassen delar en klassvariabel, som finns på en fast plats i minnet. Alla objekt kan ändra värdet på en klassvariabel, men klassvariabler kan också manipuleras utan att skapa en instans av klassen.
En klassvariabel (deklarerad static
) är en plats som är gemensam för alla instanser.
I exemplet är numberOfBicycles
en klassvariabel (eftersom den deklareras static
). Det finns bara en sådan variabel (dvs. plats) som är gemensam för alla instanser och för klassen. Så om du ändrar numberOfBicycles
på en metod, skulle andra metoder se det nya värdet (även för olika Bicycle
objekt)
Däremot är gear
& id
variabler instans (eftersom deras deklaration inte har någon static
modifierare). Varje Bicycle
-objekt har sitt eget. Om du ändrar gear
för vissa Bicycle
a , och om b är en annan att ändra a.gear
har ingen effekt på b.gear
Varje Java-objekt är en distinkt minneszon med vissa metadata (t.ex. någon hänvisning till sin klass) och dess egna instansvariabler (kanske ärvda från en superklass).Men klassvariablerna är gemensamma för klassen och delas av alla instanser.
Se även Objekt (datavetenskap) & Instansvariabel wikipages.
Svar
Instansvariabel:
- Instansvariabler deklareras i en klass, men utanför en metod, konstruktör eller något block.
- Instansvariabel tillhör förekomsten av en klass eller så kan du säga att instansvariabeln tillhör objektet.
-
Instansvariabel har separat värde för varje förekomst av klassen.
Class InstanceDemo { // this instance variable is visible for any child class. public String name = "Testing"; // count variable is visible in Demo class only. private int count = 2; }
Metod för att komma åt instansvariabel:
InstanceDemo demo = new InstanceDemo (); System.out.println("Access Instance variable: " + demo.count + " , "+demo.name );
Utgång: 2, Testning
Klassvariabel:
- Klassvariabel tillhör klassen.
- klassvariabel skapas genom att lägga till ”statiskt” nyckelord före variabeln.
- Även kallad statisk variabel.
-
Och det viktigaste klassvariabeln upprätthåller ett gemensamt delat värde för alla förekomster av en klass, även om inget förekomstobjekt av klassen existerar.
Class ClassDemo { // count variable is Same for all instance of this class public static int count = 2; }
Metod för åtkomst till klassvariabel:
System.out.println("Access Class variable: " + ClassDemo.count ); //class variable is directly refer with class name
Utgång: 2
Kort skillnad mellan klassvariabel och instansvariabel:
- Instansvariabler har separata värden för varje förekomst av en klass. Klassvariabler upprätthåller ett gemensamt delat värde för alla instanser av klassen, även om det inte finns något instansobjekt för den klassen.
- Du skulle använda det statiska nyckelordet för att ändra en instansvariabel till en klassvariabel. >
- Både instans- och klassvariabler deklareras på klassnivå, inte inom metoder.
Svar
Skillnaden mellan class variables
och instance
variabler är helt enkelt en fråga om who knows what?
.
En instance variable
är bara känd (= bunden ) till den konkreta instansen – därav namnet.
public class Person { private String firstName; private String lastName; [...] }
Definitionen av en klass är som en ritning för att bygga betong föremål. Kanske den här punkten förvirrar dig lite. Men om man skriver det så skulle varje variabel vara bunden till sitt konkreta objekt: t.ex. Varje person har sitt eget förnamn
A class variable
är å andra sidan – som namnet säger – känt för varje medlem av en klass; eller tekniskt: Det är känt / bundet på klassnivå . Det typiska exemplet är en räknare för hur många objekt du har skapat – även om det är ett mycket problematiskt exempel; men det spelar ingen roll i detta tidiga skede.
public class Person { private String firstName; private String lastName; [...] static int numberOfPersons = 0 }
numberOfPersons
förklaras static
vilket är nyckelordet för distingush mellan class variables
och instance variabes
. Variabeln deklareras som de andra inom klassdefinitionen Men nyckelordet static
signalerar att det är annorlunda.
-
firstName
,lastName
är instansvariabler och bundna till den konkreta instansen -
numberOfPersons
är bunden till klassen, så att varje instans kan komma åt denna variabel.
tl; dr
Platsen där variabler definieras är klassdefinitionen.
Klassvariabler är kända på / bundna till klassnivån, dvs. varje betong instans har tillgång till den. För att definiera en klassvariabel använder du nyckelordet static
.
I nstansvariabler är endast kända på en instansnivå. Du definierar dem utan sökordet static
.
Ytterligare dokumentation för Java finns här
Lämna ett svar