Mitä eroja on luokan muuttujien ja Java-esiintymämuuttujien välillä? [suljettu]
On tammikuu 1, 2021 by adminKommentit
- Olet ilmeisesti alkanut lukea Java ™ -oppaita: luokan jäsenten ymmärtäminen , jotka selittää tämän, mutta haven ' ei ole täysin ymmärtänyt sitä.
Vastaa
Ne ovat molemmat jäsen muuttujia, mikä tarkoittaa, että molemmat liittyvät luokkaan. Nyt tietysti näiden kahden välillä on eroja:
Ilmentymämuuttujat:
Nämä muuttujat kuuluvat luokan ilmentymään , siis objektien. Ja jokaisella kyseisen luokan (objektin) esiintymällä on oma kopio muuttujasta. Muuttujaan tehdyt muutokset eivät heijastu kyseisen luokan muissa esiintymissä.
public class Product { public int Barcode; }
Luokkamuuttujat:
Nämä tunnetaan myös nimellä staattiset jäsenmuuttujat ja siellä on vain yksi kopio muuttujasta, joka jaetaan kaikkien kyseisen luokan esiintymien kanssa. Jos muuttujaan tehdään muuttuja, kaikki muut esiintymät näkevät muutosten vaikutuksen.
public class Product { public static int Barcode; }
Täydellinen esimerkki:
// 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; }
Lähtö on:
123456
987654
Muuta nyt esiintymämuuttuja luokan muuttujaksi muuttamalla se staattiseksi:
//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; } }
Käytin ei-staattisia menetelmiä hae ja aseta Barcode
-arvon voidaksesi kutsua sitä objektista eikä fr omassa luokassa. Lähtö on seuraava:
987654
987654
Kommentit
- Miksi C # -esimerkki Java-kysymykselle?
- Ajatukseni tarkalleen. Tiedän vain Java-ohjelmoinnin, ei C #, joten et ole havainnut ollut paljon apua
- @BasileStarynkevitch I ' m pääasiassa C # -kehittäjä, ja koska periaate on tärkeä molemmille ja on yhtä hyvä kuin minä, annoin nopeasti C # Esimerkiksi väärin tietysti. 🙂 Vaihdoin esimerkkini Javaiksi.
- @SkylarAdams Anteeksi, oletin väärin liian nopeasti, että kuka tahansa, joka tuntee Java, tuntee C #: n. Vaihdoin esimerkin Java: ksi, toivottavasti siitä on apua.
- Tämäntyyppisessä kysymyksessä mielestäni sillä ei ole merkitystä, olipa kyseessä Java tai C #,
Vastaa
Se on selitetty täällä (esimerkillä Bicycle
luokka luokan muuttujalla numberOfBicycles
ja ilmentymämuuttujat cadence
, speed
, gear
& id
):
Joskus haluat, että muuttujat ovat yhteisiä kaikille kohteille. Tämä tapahtuu muokkaimella
static
. Kenttiä, joiden ilmoituksessa onstatic
-muunnin, kutsutaan staattisiksi kentiksi tai luokan muuttujiksi. Ne liittyvät luokkaan eikä mihinkään esineeseen. Jokainen luokan esiintymä jakaa luokan muuttujan, joka on yhdessä kiinteässä paikassa muistissa. Mikä tahansa objekti voi muuttaa luokan muuttujan arvoa, mutta luokan muuttujia voidaan myös muokata luomatta luokan esiintymää.
Luokan muuttuja (ilmoitettu static
) on kaikille esiintymille yhteinen sijainti.
Esimerkissä numberOfBicycles
on luokan muuttuja (koska se on ilmoitettu static
). On vain yksi tällainen muuttuja (ts. Sijainti), joka on yhteinen kaikille instansseille ja luokalle. Joten jos muokkaat numberOfBicycles
yhtä menetelmää, muut menetelmät näkevät uuden arvon (jopa erilaisille Bicycle
-objekteille)
Sen sijaan gear
& id
ovat ilmentymä muuttujia (koska heidän ilmoituksellaan ei ole static
-muunnosta). Jokaisella objektilla Bicycle
on oma. Jos muokkaat gear
joillekin Bicycle
a ja jos b on toinen esimerkiksi a.gear
-muokkauksella ei ole vaikutusta b.gear
Jokainen Java-objekti on erillinen muistialue, jossa on joitain metadataa (esim. jokin viittaus luokkaansa) ja omat esiintymämuuttujansa (ehkä peritty yläluokasta).Mutta luokan muuttujat ovat luokalle yhteisiä, ja kaikki esiintymät jakavat ne.
Katso myös Object (tietojenkäsittelytiede) & Ilmentymämuuttujan wikipages.
Vastaa
Ilmentymämuuttuja:
- Ilmentymämuuttujat ilmoitetaan luokassa, mutta menetelmän, konstruktorin tai minkä tahansa lohkon ulkopuolella.
- Ilmentymämuuttuja kuuluu luokan ilmentymään tai voit sanoa, että ilmentymämuuttuja kuuluu objektiin.
-
Ilmentymämuuttujalla on luokan jokaisen esiintymän erillinen arvo.
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; }
Menetelmä ilmentymämuuttujan käyttämiseen:
InstanceDemo demo = new InstanceDemo (); System.out.println("Access Instance variable: " + demo.count + " , "+demo.name );
Tulos: 2, testaus
Luokkamuuttuja:
- Luokkamuuttuja kuuluu luokkaan.
- luodaan luokan muuttuja lisäämällä ”staattinen” avainsana muuttujan eteen.
- Kutsutaan myös staattiseksi muuttujaksi.
-
Ja tärkein luokan muuttuja säilyttää yhden jaetun arvon kaikille luokan esiintymille, jopa jos luokan ilmentymäobjektia ei ole.
Class ClassDemo { // count variable is Same for all instance of this class public static int count = 2; }
Menetelmä luokan muuttujan käyttämiseksi:
System.out.println("Access Class variable: " + ClassDemo.count ); //class variable is directly refer with class name
Tulos: 2
Lyhyt ero luokan muuttujan ja esiintymämuuttujan välillä:
- Ilmentymämuuttujilla on erilliset arvot kullekin luokan esimerkki. Luokkamuuttujat säilyttävät yhden jaetun arvon kaikille luokan esiintymille, vaikka kyseisen luokan esiintymäobjektia ei olisikaan.
- Staattisen avainsanan avulla muuttaisit esiintymämuuttujan luokan muuttujaksi.
- Sekä esiintymä- että luokkamuuttujat ilmoitetaan luokkatasolla, ei menetelmien sisällä.
Vastaa
Muuttujien class variables
ja instance
muuttujien välillä on yksinkertaisesti kysymys who knows what?
.
instance variable
tunnetaan vain (= sidottu ) tälle konkreettiselle esiintymälle – tästä syystä nimi.
public class Person { private String firstName; private String lastName; [...] }
Luokan määritelmä on kuin suunnitelma betoni esineiden rakentamiseen. Ehkä tämä kohta hämmentää sinua hieman. Mutta kirjoittamalla se tällä tavalla, jokainen muuttuja olisi sidottu sen konkreettiseen kohteeseen: esim. Jokaisella henkilöllä on oma etunimi
Toisaalta class variable
on – kuten nimikin sanoo – jokaisen jäsenen tiedossa luokan; tai teknisesti: Se tunnetaan / sidotaan luokan tasolla . Tyypillinen esimerkki on laskuri siitä, kuinka monta kohdetta olet luonut – vaikka se onkin erittäin ongelmallinen esimerkki; mutta sillä ei ole merkitystä tässä varhaisessa vaiheessa.
public class Person { private String firstName; private String lastName; [...] static int numberOfPersons = 0 }
numberOfPersons
julistetaan static
joka on avainsana erottamaan class variables
ja instance variabes
. Muuttuja ilmoitetaan kuten muutkin luokan määritelmässä . Mutta static
-avainsana ilmoittaa, että se on erilainen.
-
firstName
,lastName
ovat instanssimuuttujia ja sidottu kyseiseen ilmentymään -
numberOfPersons
on sidottu luokkaan, jotta jokainen ilmentymä voisi käyttää tätä muuttujaa.
tl; dr
Muuttujien määrittelypaikka on luokan määritelmä.
Luokkamuuttujat tunnetaan luokkatasolla / sidottuina, eli jokainen betoni ilmentymällä on pääsy siihen. Määritä luokan muuttuja käyttämällä avainsanaa static
.
I nstance-muuttujat tunnetaan vain instanssitasolla. Määrität ne ilman avainsanaa static
.
Java-ohjeet ovat täällä
Vastaa