Ohjelmointi

Kuinka tallentaa tietoja Java-objekteihin

Päivitetty viimeksi: tammikuu 2020

Vaikka torkkupainike on luultavasti herätyskellon yleisimmin käytetty painike, jopa yksinkertainen Herätyskello luokka tarvitsee vielä muutamia ominaisuuksia. Voit esimerkiksi haluta säätää, kuinka kauan herätyskello pysyy torkkutilassa. Tällaisen ominaisuuden lisäämiseksi sinun on ymmärrettävä, kuinka Java hallitsee tietoja.

Kehittäjät käyttävät muuttujat Java-tilassa tietojen säilyttämiseksi, ja kaikilla muuttujilla on tietotyyppi ja nimi. Tietotyyppi määrittää arvot, joita muuttuja voi pitää. Tässä opetusohjelmassa opit, kuinka integraalityypit pitävät kokonaislukuja, liukuluku tyypit pitävät reaalilukuja ja merkkijonot merkkijonoja. Sitten aloitat ilmentymämuuttujien käyttämisen Java-luokissa.

Muuttujat ja primitiiviset tyypit

Olla nimeltään primitiiviset tyypit, integraali- ja liukuluku tyypit ovat yksinkertaisia ​​Java-tietotyyppejä. Seuraava ohjelma kuvaa integraalityypin, johon voi sisältyä sekä positiivisia että negatiivisia kokonaislukuja. Tämä ohjelma kuvaa myös kommentteja, jotka dokumentoivat koodisi, mutta eivät vaikuta ohjelmaan millään tavalla.

/ * * Tämä on myös kommentti. Kääntäjä jättää huomiotta kaiken * ensimmäisestä / *: sta kommentin päättävään "tähtiviivaan" asti. * * Tässä on "tähtiviiva", joka lopettaa kommentin. * / public class IntegerTest {public static void main (String [] args) {// Tässä on int-muuttujan nimeltään anInteger, // jonka annat alkuarvoksi 100. int anInteger = 100; // Ilmoita ja alusta anInteger System.out.println (anInteger); // Lähdöt 100 // Voit myös suorittaa aritmeettisen toiminnan primitiivityyppien kanssa // aritmeettisten vakiooperaattoreiden avulla. kokonaisluku = 100 + 100; System.out.println (anInteger); // Lähdöt 200}} 

Java käyttää myös liukulukutyyppejä, joihin mahtuu reaalilukuja eli numeroita, jotka sisältävät desimaalin. Tässä on esimerkkiohjelmasta:

public class DoubleTest {public static void main (String [] args) {// Tässä on kaksoismuuttujan nimeltään aDouble. // Annat aDouble: lle myös alkuarvoksi 5,76. kaksinkertainen aTupla = 5,76; // Ilmoita ja alusta aDouble System.out.println (aDouble); // Lähdöt 5.76 // Voit suorittaa laskutoimituksen myös liukulukujen kanssa. aTupla = 5,76 + 1,45; System.out.println (aDouble); // Lähdöt 7.21}} 

Yritä suorittaa yllä olevat ohjelmat. Muista, että sinun on käännettävä ennen kuin voit suorittaa ne:

javac * .java java IntegerTest java DoubleTest 

Java käyttää neljää integraalityyppiä ja kahta liukulukutyyppiä, jotka molemmat pitävät eri lukualueita ja vievät vaihtelevaa määrää tallennustilaa, kuten alla olevissa taulukoissa on esitetty.

Kiinteät tyypit

TYYPPITavuLyhytIntPitkä
KOKO (bittiä)8163264
ALUE-128-127-32 768 - 32 767-2 147 483 648 - 2 147 483 647-263 - 263-1

Liukulukutyypit (IEEE 754 -muoto)

 
TYYPPIYhden tarkkuuden liukulukuKaksitarkka kelluva piste
KOKO (bittiä)3264
ALUE+/- 1,18x10-38 - +/- 3,4x1038+/- 2,23x10-308 - +/- 1,8x10308

A merkkijonotyyppi pitää merkkijonoja ja käsittelee niitä eri tavoin kuin integraali- ja liukuluku tyypit käsittelevät numeroita. Java-kieli sisältää a Merkkijono luokka edustamaan merkkijonoja. Ilmoitat merkkijonon tyypin avulla Merkkijonoja alusta se lainatulla merkkijonolla, kaksoislainausmerkeissä olevalla merkkisarjalla, kuten alla on esitetty. Voit myös yhdistää kaksi merkkijonoa käyttämällä + operaattori.

// Koodifragmentti // Ilmoitus muuttujista s tyypin String, // ja alustaminen lainatulla merkkijonolla "Hello". Merkkijono s = "Hei"; // Merkkijonon ketjutus s: ssä lainatulla merkkijonolla "Maailma" Merkkijono t = s + "Maailma"; System.out.println (t); // Lähdöt Hei maailma

Vaihteleva soveltamisala

Tyypin lisäksi soveltamisala on myös tärkeä ominaisuus muuttujalle. Laajuus määrittää, milloin muuttuja luodaan ja tuhotaan ja missä kehittäjä voi käyttää muuttujaa ohjelmassa. Ohjelman paikka, jossa ilmoitat muuttujan, määrittää sen laajuuden.

Toistaiseksi olen keskustellut paikalliset muuttujat, jotka sisältävät väliaikaisia ​​tietoja, joita käytät menetelmässä. Ilmoitat paikalliset muuttujat menetelmien sisällä, ja pääset niihin vain näiden menetelmien sisällä. Tämä tarkoittaa, että voit hakea vain paikallisia muuttujia kokonaisluku, jota käytit KokonaislukuTestija aTupla, jota käytit DoubleTest, päämenetelmästä, jolla he ilmoitettiin, eikä missään muualla.

Voit ilmoittaa paikalliset muuttujat missä tahansa menetelmässä. Alla oleva esimerkkikoodi ilmoittaa paikallisen muuttujan AlarmClock-torkku () menetelmä:

public class AlarmClock {public void snooze () {// Torkkuaika millisekunnissa = 5 sekuntia pitkä torkkuintervalli = 5000; System.out.println ("ZZZZZ for:" + torkkoväli); }} 

Voit päästä torkkuInterval vain torkku () menetelmä, missä ilmoitit torkkuInterval, kuten tässä näkyy:

public class AlarmClockTest {public static void main (String [] args) {AlarmClock aClock = uusi AlarmClock (); aClock.snooze (); // Tämä on edelleen hieno. // Seuraava koodirivi on VIRHE. // Et voi käyttää torkkuintervallia torkkutavan ulkopuolella. torkkuintervalli = 10000; }} 

Menetelmän parametrit

A method-parametri, jonka laajuus on samanlainen kuin paikallinen muuttuja, on toinen muuttujatyyppi. Menetelmäparametrit välittävät argumentit menetelmiin. Kun ilmoitat menetelmän, määrität sen argumentit parametriluetteloon. Välität argumentit, kun kutsut menetelmää. Menetelmän parametrit toimivat samalla tavalla kuin paikalliset muuttujat, koska ne kuuluvat sen menetelmän piiriin, johon ne on linkitetty, ja niitä voidaan käyttää koko menetelmässä. Toisin kuin paikalliset muuttujat, menetelmän parametrit saavat arvon soittajalta, kun se kutsuu menetelmää. Tässä on herätyskellon muunnos, jonka avulla voit syöttää torkkuInterval.

public class AlarmClock {public void snooze (long snoozeInterval) {System.out.println ("ZZZZZ for:" + torkkuintervalli); }} 
public class AlarmClockTest {public static void main (String [] args) {AlarmClock aClock = uusi AlarmClock (); // Siirrä torkkuaika, kun kutsut menetelmää. aClock.snooze (10000); // Torkku 10000 msek. }} 

Jäsenmuuttujat: Kuinka objektit tallentavat tietoja

Paikalliset muuttujat ovat hyödyllisiä, mutta koska ne tarjoavat vain väliaikaisen tallennustilan, niiden arvo on rajallinen. Koska heidän elinaikansa kattavat ilmoitetun menetelmän pituuden, paikalliset muuttujat vertautuvat muistiinpanoon, joka ilmestyy joka kerta, kun vastaanotat puhelun, mutta katoaa, kun katkaiset puhelun. Tämä asetus voi olla hyödyllinen muistiinpanojen muistiinpanossa, mutta joskus tarvitset jotain pysyvämpää. Mitä ohjelmoija tekee? Tulla sisään jäsenmuuttujat.

Jäsenmuuttujat - joita on kaksi, ilmentymä ja staattinen - muodostavat osan luokasta.

Vaihteleva laajuus ja käyttöikä

Kehittäjät toteuttavat ilmentymämuuttujia sisältämään luokalle hyödyllisiä tietoja. Esimerkkimuuttuja eroaa paikallisesta muuttujasta sen laajuuden ja käyttöiän luonteeltaan. Koko luokka muodostaa ilmentymämuuttujan laajuuden, ei menetelmä, jolla se ilmoitettiin. Toisin sanoen kehittäjät voivat käyttää ilmentymämuuttujia missä tahansa luokassa. Lisäksi instanssimuuttujan elinaika ei riipu mistä tahansa luokan menetelmästä; eli sen käyttöikä on sen sisältävän ilmentymän elinikä.

Ilmentymät ovat todellisia objekteja, jotka luot luokan määrittelyssä suunnitellusta suunnitelmasta. Ilmoitat ilmentymämuuttujat luokan määritelmässä, mikä vaikuttaa kaikkiin piirustuksesta luomiin ilmentymiin. Jokainen esiintymä sisältää kyseiset muuttujat, ja muuttujien sisällä olevat tiedot voivat vaihdella esiintymittäin.

Harkitse Herätyskello luokassa. Passing torkkuInterval osaksi torkku () menetelmä ei ole hieno muotoilu. Kuvittele, että sinun on kirjoitettava torkkutaajuus herätyskelloon aina, kun etsit torkkutoimintopainiketta. Anna sen sijaan koko herätyskello a torkkuInterval. Täydennät tämän instanssimuuttujalla Herätyskello luokka, kuten alla on esitetty:

public class AlarmClock {// Ilmoitat torkkutoiminnon tässä. Tämä tekee siitä instanssimuuttujan. // Alustat sen myös täällä. pitkä m_snoozeInterval = 5000; // Torkkuaika millisekunnissa = 5 sekuntia. public void snooze () {// Voit silti päästä m_snoozeIntervaliin AlarmClock-menetelmällä //, koska kuulut luokan piiriin. System.out.println ("ZZZZZ for:" + m_snoozeInterval); }} 

Voit käyttää ilmentymämuuttujia melkein missä tahansa ilmoitettavan luokan sisällä. Teknisen suhteen ilmoitat ilmentymämuuttujan luokan laajuus, ja voit noutaa sen melkein mistä tahansa. Käytännössä voit käyttää muuttujaa missä tahansa luokan aloittavan ensimmäisen kiharaisen haarukan ja sulkulistan välissä. Koska ilmoitat myös menetelmät luokan soveltamisalaan, myös he voivat käyttää ilmentymämuuttujia.

Voit käyttää ilmentymämuuttujia myös luokan ulkopuolelta, kunhan ilmentymä on olemassa, ja sinulla on muuttuja, joka viittaa ilmentymään. Voit hakea ilmentymämuuttujan ilmentymän kautta käyttämällä pisteoperaattori yhdessä instanssin kanssa. Se ei ehkä ole paras tapa käyttää muuttujaa, mutta täydennä se tällä tavalla havainnollistamistarkoituksiin:

public class AlarmClockTest {public static void main (String [] args) {// Luo kaksi kelloa. Jokaisella on oma m_snoozeInterval AlarmClock aClock1 = uusi AlarmClock (); AlarmClock aClock2 = uusi AlarmClock (); // Vaihda aClock2 // Pian näet, että tähän on olemassa paljon parempia tapoja. aClock2.m_snoozeInterval = 10000; aClock1.torkku (); // Torkku aClock1: n aikavälillä aClock2.snooze (); // Torkku aClock2: n välein}} 

Kokeile tätä ohjelmaa ja näet sen aClock1 sen väli on edelleen 5000 aClock2 väli on 10000. Jokaisella instanssilla on jälleen omat instanssitiedot.

Älä unohda, luokan määritelmä on vain suunnitelma, joten ilmentymämuuttujia ei ole olemassa ennen kuin luot instansseja piirustuksesta. Jokaisella luokan esiintymällä on oma kopio ilmentymämuuttujista, ja suunnitelma määrittää, mitkä esiintymämuuttujat ovat.

JavaWorld

Kapselointi

Kapselointi on yksi olio-ohjelmoinnin perusta. Kapselointia käytettäessä käyttäjä on vuorovaikutuksessa tyypin kanssa altistuneen käyttäytymisen kautta, ei suoraan sisäisen toteutuksen kanssa. Kapseloinnin avulla piilotat tyypin toteutuksen yksityiskohdat. Java: ssa kapselointi tarkoittaa periaatteessa tätä yksinkertaista ohjetta: "Älä käytä objektisi tietoja suoraan, käytä sen menetelmiä."

Se on perusajatus, mutta se helpottaa elämäämme ohjelmoijina. Kuvittele esimerkiksi, että halusit opettaa a Henkilö esine seisomaan. Ilman kapselointia komentosi voivat mennä noin tältä: "No, luulen, että sinun on kiristettävä tämä lihas täällä jalan edessä, löysää tämä lihas täällä jalan takana. Hmmm - täytyy taivuttaa myös vyötärö. Mitkä lihakset sytyttävät tuon liikkeen? Tarvitseeko kiristää nämä, löysää niitä. Hups! Unohdin toisen jalan. Darn. Katso sitä - älä kaatu yli ... "Saat idean. Kapseloimalla sinun tarvitsee vain vedota nouse ylös() menetelmä. Melko helppoa, kyllä?

Joitakin kapseloinnin etuja:

  • Yksityiskohtien tiivistelmä: Käyttäjä on vuorovaikutuksessa tyypin kanssa korkeammalla tasolla. Jos käytät nouse ylös() menetelmällä, sinun ei enää tarvitse tuntea kaikkia lihaksia, joita tarvitaan liikkeen aloittamiseen.
  • Eristys muutoksista:Sisäisen toteutuksen muutokset eivät vaikuta käyttäjiin. Jos henkilö nyrjähtää nilkkaan ja riippuu kepistä jonkin aikaa, käyttäjät vetoavat edelleen vainnouse ylös()menetelmä.
  • Oikeus:Käyttäjät eivät voi mielivaltaisesti muuttaa objektin sisäosia. He voivat suorittaa vain sen, mitä annat heidän tehdä kirjoittamissasi menetelmissä.

Tässä on lyhyt esimerkki, jossa kapselointi auttaa selvästi ohjelman tarkkuutta:

// Huono - ei käytä kapselointia julkinen luokka Henkilö {int m_age; } public class PersonTest {public static void main (Merkkijono [] argumentit) {Henkilö p = uusi henkilö (); p.m_age = -5; // Hei - kuinka joku voi olla miinus 5-vuotias? }} // Parempi - käyttää kapselointia julkinen luokka Henkilö {int m_age; public void setAge (int age) {// Tarkista, että ikä on yli 0. Puhun lisää // jos lausunnoista muulla hetkellä. if (ikä> 0) {m_age = ikä; }}} public class PersonTest {public static void main (Merkkijono [] argumentit) {Henkilö p = uusi henkilö (); p.setAge (-5); // Ei vaikuta nyt. }} 

Jopa tämä yksinkertainen ohjelma näyttää, kuinka voit joutua vaikeuksiin, jos käytät suoraan luokkien sisäisiä tietoja. Mitä suurempi ja monimutkaisempi ohjelma on, sitä tärkeämmäksi kapselointi tulee. Muista myös, että monet ohjelmat alkavat pieninä ja kasvavat sitten loputtomiin, joten on tärkeää, että suunnittelet ne oikein, alusta alkaen. Kapseloinnin käyttäminen Herätyskello, voit vain luoda menetelmiä torkkutaajuuden käsittelemiseksi.

Huomautus menetelmistä

Menetelmät voivat palauttaa arvot, joita soittaja käyttää. Palauta arvo ilmoittamalla ei-välttämätön palautustyyppi ja käyttämällä a palata lausunto. getSnoozeInterval () alla olevassa esimerkissä esitetty menetelmä kuvaa tätä.

Kirjoita ohjelma

$config[zx-auto] not found$config[zx-overlay] not found