Java sintaksisine düşünmän, çynlakaý dörediji bolmak mümkin däl, şonuň üçin bu gün sintaksis öwrenmegi dowam etdirýäris. Öňki makalalaryň birinde başlangyç üýtgeýjiler hakda gürleşipdik, ýöne üýtgeýänleriň iki görnüşi bolansoň, bu gün ikinji görnüş - Java-da salgylanma görnüşleri barada gürleşeris. Onda näme? Java-da maglumat maglumat görnüşleri näme üçin zerur? Kanal belgisi, ses göwrümi we baýdak ýaly käbir aýratynlyklary bolan telewizion obýektimiziň bardygyny göz öňüne getireliň:
public class TV {
int numberOfChannel;
int soundVolume;
boolean isOn;
}
Simpleönekeý görnüş int
bu maglumatlary nädip saklap biler? Rememberatda saklaň: bir üýtgeýji int
4 baýt. Insideöne içinde şol bir görnüşdäki iki üýtgeýji (4 baýt + 4 baýt), şeýle hem boolean
(+1 baýt) bar ... Jemi - 4-den 9-a çenli, ýöne adatça, bir obýektde has köp maglumat saklanýar. Näme etmeli? Bir obýekti üýtgeýjä goýup bilmersiňiz. Hekaýamyzyň bu nokadynda salgylanma üýtgeýjileri peýda bolýar. Salgy üýtgeýjileri belli bir obýektiň ýerleşýän ýadynyň salgysyny saklaýar. Thisagny, bu salgymyzy “wizit kartoçka” bolup, obýektimizi umumy ýatda tapyp we onuň bilen käbir manipulýasiýa edip bileris. Java-daky islendik obýekte salgylanma üýtgeýjidir. Teleýaýlym obýektimiz bilen nähili boljakdygy:
TV telly = new TV();
telly
Telewizoryň döredilen obýektine baglanyşyk üçin ady bolan görnüşli telewizoryň üýtgeýjisini goýduk. Jagny, JVM telewizor obýekti üçin üýşmek üçin ýady bölýär, ony döredýär we adresini ýatda saklaýar, telly
bukjada saklanýan üýtgeýjä goýýar. Bu leksiýada ýat hakda has köp okap bilersiňiz, ýagny stack we başga-da köp peýdaly maglumatlar . Telewizoryň üýtgeýän görnüşi we telewizoryň görnüşi, üns berdiňizmi? Munuň sebäbi ýok: belli bir görnüşdäki obýektleriň şol bir görnüşdäki degişli üýtgeýjileri bolmaly (miras we interfeýs amallaryny hasaba alman, ýöne indi muny göz öňünde tutmaýarys). Galyberse-de, äýnege çorba guýjak däl, şeýlemi? Görnüşi ýaly, obýektimiz telewizor, onuň üçin salgylanma üýtgeýjisi dolandyryş paneline meňzeýär. Bu uzakdan dolandyrmak arkaly obýektimiz we onuň maglumatlary bilen täsirleşip bileris. Mysal üçin, telewizorymyzyň aýratynlyklaryny düzüň:
telly.isOn = true;
telly.numberOfChannel = 53;
telly.soundVolume = 20;
.
Bu ýerde üýtgeýjiniň görkezýän obýektiniň içki elementlerine girmek we ulanyp başlamak üçin nokat operatory ulandyk . Mysal üçin, birinji setirde üýtgeýjini aýtdyk : “ salgylanýan obýektiň telly
içerki üýtgeýjisini bize beriň we hakykata öwüriň” (biziň üçin telewizory açyň).isOn
Salgy üýtgeýjilerini kesgitlemek
Salgy görnüşiniň we olaryň görkezýän obýektleriniň iki üýtgeýjisi bar diýeliň:TV firstTV = new TV();
TV secondTV = new TV();
Writeazsak:
firstTV = secondTV;
bu, birinji üýtgeýjini salgynyň göçürmesiniň (salgy salgysynyň bahasy) ikinji obýekte baha hökmünde belländigimizi, indi iki üýtgeýjiniň ikinji obýekte degişlidigini (başgaça aýdylanda, birmeňzeş iki sany uzakdan dolandyrmagyň) Telewizor). Şol bir wagtyň özünde, ilkinji obýekt oňa degişli üýtgeýjisiz galdy. Netijede, girip bolmaýan bir obýektimiz bar, sebäbi üýtgeýji oňa şeýle şertli sapak bolupdy, onsuz hapa öwrülýär, diňe ýatda galýar we ýer tutýar. Bu obýekt soňundan hapa ýygnaýjy tarapyndan ýatdan çykarylar . Başga bir baglanyşyksyz obýekt bilen birleşdiriji sapagy döwüp bilersiňiz:
secondTV = null;
Netijede, obýekte diňe bir baglanyşyk bolar - firstTV
we secondTV
mundan beýläk hiç kime görkezmez (bu geljekde telewizor ýaly käbir obýektlere baglanyşyk bellemegimize päsgel bermez).
Setir synpy
Aýry-aýrylykda, String synpyny ýatlamak isleýärin . Bu setir hökmünde saklanýan maglumatlary saklamak we işlemek üçin döredilen esasy synpdyr. Mysal:String text = new String("This TV is very loud");
Bu ýerde obýektiň konstruktorynda saklanjak bir setir geçdik. Emma hiç kim muny etmeýär. Galyberse-de, setirler döredilip bilner:
String text = "This TV is very loud";
Has amatly, şeýlemi? Ulanyşyň meşhurlygy nukdaýnazaryndan, String
ol başlangyç görnüşlerden pes däl, ýöne ol henizem synp bolup durýar we oňa salgylanýan üýtgeýji başlangyç görnüş däl-de, salgylanma görnüşidir. String
Setirleri birleşdirmek üçin bu ajaýyp ukybymyz bar :
String text = "This TV" + " is very loud";
Netijede, teksti ýene alarys: This TV is very loud
sebäbi iki setir bir bitewi birleşer we üýtgeýji bu doly tekste salgylanar. Möhüm nuans, String
bu üýtgewsiz synp. Bu näme many berýär? Geliň, mysal alalyň:
String text = "This TV";
text = text + " is very loud";
Everythinghli zat ýönekeý ýaly: üýtgeýjini yglan edýäris, oňa baha berýäris. Indiki setirde ony üýtgedýäris. Emma hakykatdanam üýtgemeýäris. Bu üýtgewsiz synp bolansoň, ikinji setirde başlangyç bahasy üýtgedilmän, täze bir döredilýär, bu bolsa öz gezeginde birinjiden durýar + " is very loud"
.
Salgy yzygiderliligi
Ilkinji görnüşler baradaky makalada yzygiderli mowzuk barada durup geçdik. Salgy üýtgeýjisi gutarnykly diýip yglan edenimizde özüni nähili alyp barar ?final TV telly = new TV();
Munuň obýekti üýtgemez diýip pikir edip bilersiňiz. Nook, bu dogry däl. Üýtgediji bilen salgylanma üýtgeýjisi, final
haýsydyr bir usul bilen açmak mümkinçiliginden mahrum bolar (ony täzeden kesgitläň ýa-da deňleşdiriň null
). Suchagny, şeýle üýtgeýjiniň bahasyny kesgitlänsoň, aşakdaky ýaly kod:
telly = new TV();
ýa-da
telly = null;
düzmek ýalňyşlygyna sebäp bolar. Onlyagny, final
diňe baglanyşykda hereket edýär we obýektiň özüne täsir etmeýär. Ilki bilen üýtgäp bilýän bolsak, içerki ýagdaýyny hiç hili kynçylyksyz üýtgedip bileris:
telly.soundVolume = 30;
Käwagt üýtgeýjiler hatda usul argumentlerinde-de gutarnykly diýilýär!
public void enableTV (final TV telly){
telly.isOn = true;
}
Bu usul ýazylanda, bu argumentleri ýok edip bolmaz we şoňa görä-de az bulaşyklyk döreder ýaly edilýär. final
Üýtgemeýän bir zady aňladýan salgylanma üýtgeýjisini görkezsek näme etmeli ? Mysal üçin String
:
final String PASSWORD = "password";
Netijede, hemişelik, adaty görnüşdäki yzygiderliligiň meňzeşini alarys, sebäbi bu ýerde ne salgylanmany täzeden kesgitläp bilmeris, ne-de obýektiň içki ýagdaýyny üýtgedip bilmeris (içerki maglumatlar).
Geliň, jemläliň
- Simpleönekeý üýtgeýjiler baha bitlerini saklaýan bolsa, salgy üýtgeýjiler obýektiň nädip alynýandygyny görkezýän bitleri saklaýar.
- Obýekt salgylanmalary obýektiň diňe bir görnüşi üçin yglan edilýär.
- Java-daky islendik synp salgylanma görnüşidir.
- Java-da islendik salgy üýtgeýjisiniň deslapky bahasy
null
. String
salgylanma görnüşiniň adaty mysalydyr. Bu synp hem üýtgewsizdir.- Üýtgediji bilen salgylanma üýtgeýjileri
final
gaýtadan kesgitlemek mümkinçiligi bolmazdan diňe bir obýekte baglydyr.
GO TO FULL VERSION