Mi a különbség az osztályváltozók és a Java példányváltozók között? [zárt]
On január 1, 2021 by adminMegjegyzések
- Úgy tűnik, hogy elkezdte olvasni a Java ™ oktatóanyagokat: Az osztálytagok megértése ezt megmagyarázza, de a ' még nem értette teljesen.
Válasz
Mindkettő tag változó, vagyis mindkettő egy osztályhoz van társítva. Természetesen vannak különbségek a kettő között:
Példányváltozók:
Ezek a változók az osztály példányához tartoznak, tehát egy objektumhoz. És az osztály (objektum) minden példányának megvan a saját példánya a változóból. A változóban végrehajtott változtatások nem tükröződnek az adott osztály más példányaiban.
public class Product { public int Barcode; }
Osztályváltozók:
Ezek más néven statikus tagváltozók és ennek a változónak csak egy példánya van megosztva az adott osztály összes példányával. Ha változtatásokat hajtanak végre a változóban, az összes többi példány látni fogja a változtatások hatását.
public class Product { public static int Barcode; }
Teljes példa:
// 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; }
A kimenet a következő lesz:
123456
987654
Most változtassa meg a példányváltozót osztályváltozóvá, statikussá téve azt:
//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; } }
Nem statikus módszereket használtam a kapja meg és állítsa be a Barcode
értékét, hogy az objektumból lehessen hívni om az osztály. A kimenet a következő lesz:
987654
987654
Megjegyzések
- Miért C # példa egy Java kérdésre?
- Pontosan a gondolataim. Csak a java programozását ismerem, nem a C # -t, tehát nincs sokat segített
- @BasileStarynkevitch I ' m főleg C # fejlesztő, és mivel az elv mindkettőnek számít, és ugyanolyan jó, mint egy, gyorsan megadtam egy C # -ot Például tévedtem tőlem. 🙂 A példámat Java-ra változtattam.
- @SkylarAdams Sajnálom, túl tévesen feltételeztem, hogy bárki, aki ismeri a Java-t, ismeri a C # szót. A példát Java-ra cseréltem, remélem, hogy ez segít.
- Ennél a kérdésnél szerintem lényegtelen, akár Java, akár C # használatával,
Válasz
itt van megmagyarázva (példával Bicycle
osztály a numberOfBicycles
osztályváltozóval és a cadence
, speed
változóval, gear
& id
):
Előfordulhat, hogy olyan változókat akarsz használni, amelyek minden objektumra vonatkoznak. Ez a
static
módosítóval érhető el. Azokat a mezőket, amelyek deklarációjában astatic
módosító szerepel, statikus mezőknek vagy osztályváltozóknak nevezzük. Az osztályhoz vannak társítva, semmilyen tárgyhoz. Az osztály minden példánya osztozik egy osztályváltozóban, amely egy rögzített helyen van a memóriában. Bármely objektum megváltoztathatja az osztályváltozó értékét, de az osztályváltozók az osztály példányának létrehozása nélkül is kezelhetők.
Osztályváltozó (deklarált static
) az összes példányra jellemző hely.
A példában a numberOfBicycles
osztályváltozó (mivel static
-nek van nyilvánítva). Csak egy ilyen változó (azaz hely) van közös minden példányban és az osztályban. Tehát, ha a numberOfBicycles
-et egy módszerrel módosítja, más módszerek látják az új értéket (még a különböző Bicycle
objektumok esetében is)
Ezzel szemben gear
& id
példány változók (mert deklarációjuknak nincs static
módosítója). Minden Bicycle
objektumnak megvan a maga. Ha módosítja a gear
elemet néhány Bicycle
a esetén, és ha a b másik Például a a.gear
módosítása nincs hatással a b.gear
Minden Java objektum külön memóriazónára, néhány metaadattal (pl. némi utalás az osztályára) és saját példányváltozói (esetleg egy szuperosztálytól örököltek).De az osztályváltozók közösek az osztályban, és minden példány megosztja őket.
Lásd még: Objektum (informatika) & Példányváltozó wikipages.
Válasz
Példányváltozó:
- A példányváltozók deklarálva vannak egy osztályban, de metóduson, konstruktoron vagy bármely blokkon kívül.
- A példányváltozó egy osztály példányához tartozik, vagy mondhatja, hogy a példányváltozó az objektumhoz tartozik.
-
A példányváltozó az osztály minden egyes példányának külön értéke.
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; }
Módszer a példányváltozó elérésére:
InstanceDemo demo = new InstanceDemo (); System.out.println("Access Instance variable: " + demo.count + " , "+demo.name );
Kimenet: 2, tesztelés
Osztályváltozó:
- Az osztályváltozó az osztályhoz tartozik.
- osztályváltozó jön létre a „statikus” kulcsszó hozzáadásával a változó elé.
- Más néven statikus változó.
-
És a legfontosabb osztályváltozó egyetlen megosztott értéket tart fenn az osztály minden példányához, méghozzá ha nem létezik az osztály példányobjektuma.
Class ClassDemo { // count variable is Same for all instance of this class public static int count = 2; }
Módszer az osztályváltozó elérésére:
System.out.println("Access Class variable: " + ClassDemo.count ); //class variable is directly refer with class name
Kimenet: 2
Rövid különbség az osztályváltozó és a példányváltozó között:
- A példányváltozók mindegyikének külön értékei vannak osztály példánya. Az osztályváltozók egyetlen megosztott értéket tartanak fenn az osztály összes példányára, még akkor is, ha az adott osztálynak nincs példányobjektuma.
- A statikus kulcsszóval egy példányváltozót osztályváltozóvá változtatna.
- Mind a példány, mind az osztály változót osztály szinten deklarálják, nem a módszereken belül.
Válasz
A class variables
és a instance
változók közötti különbség egyszerűen who knows what?
kérdés.
Egy instance variable
csak ismert (= kötött ) annak a konkrét példánynak – innen a név.
public class Person { private String firstName; private String lastName; [...] }
Az osztály definíciója olyan, mint egy tervrajz beton tárgyak építéséhez. Talán ez a pont kissé megzavarja t. De így írva minden változó konkrét tárgyához kötődik: pl. Minden embernek megvan a saját keresztneve
A class variable
viszont – ahogy a neve is mondja – minden tag ismeri egy osztály; vagy technikailag: osztály szinten ismert / kötött. A tipikus példa egy számláló arra, hogy hány objektumot hoztál létre – bár ez nagyon problematikus példa; de ez a korai szakaszban nem számít.
public class Person { private String firstName; private String lastName; [...] static int numberOfPersons = 0 }
numberOfPersons
static
amely kulcsszó a class variables
és instance variabes
elválasztásához. A változó deklarálva van, mint a többi az osztálydefiníción belül . De a static
kulcsszó jelzi, hogy ez más.
-
firstName
,lastName
példányváltozók és ehhez a konkrét példányhoz vannak kötve -
numberOfPersons
az osztályhoz van kötve, így minden példány hozzáférhet ehhez a változóhoz.
tl; dr
A változók definiálásának helye az osztálydefiníció.
Az osztályváltozók az osztály szintjén / ahhoz kötve vannak ismertek, azaz minden konkrét a példánynak hozzáférése van hozzá. Egy osztályváltozó meghatározásához használja a static
kulcsszót.
I Az nstance változók csak példányszinten ismeretesek. A static
kulcsszó nélkül definiálja őket.
A Java további dokumentációja itt
Vélemény, hozzászólás?