Salam! Siz başlangyç görnüşleri bilen eýýäm tanyş we olar bilen köp işlediňiz.
Programmirlemekde we esasanam Java-da ilkinjileriň köp artykmaçlygy bar: az ýat tutýarlar we şeýlelik bilen programmanyň netijeliligini ýokarlandyrýarlar we aç-açan gymmatlyklara bölünýärler. Şeýle-de bolsa, Java-y öwrenmek prosesinde, “
Java-da hemme zat bir zat ” diýen mantra ýaly birnäçe gezek gaýtaladyk. Emma ilkinjiler bu sözleriň gönüden-göni ret edilmegidir. Olar obýekt däl. Diýmek, “hemme zat bir zat” ýörelgesi ýalanmy? Aslynda beýle däl. Java-da her bir başlangyç görnüşde ekiz dogany,
örtük synpy (
Wrapper
) bar. Örtük näme?
Örtük, içindäki başlangyç gymmaty saklaýan ýörite synpdyr. Thisöne bu synp bolansoň, öz mysallaryny döredip biler. Hakyky obýekt bolmak bilen birlikde zerur başlangyç gymmatlyklary içerde saklarlar. Örtük synplarynyň atlary degişli primitivleriň atlaryna gaty meňzeýär ýa-da olar bilen düýbünden gabat gelýär. Şonuň üçin olary ýatlamak gaty aňsat bolar.
Ilkinji maglumatlaryň görnüşleri üçin ýazyjy synplar |
Ilkinji maglumatlaryň görnüşleri |
Wrapper sapaklary |
int |
Bitewi |
gysga |
Gysga |
uzyn |
Uzyn |
baýt |
Baýt |
ýüzmek |
Float |
goşa |
Iki gezek |
char |
Nyşan |
boolean |
Boolean |
Wrapper synp obýektleri edil beýleki ýaly döredilýär:
public static void main(String[] args) {
Integer i = new Integer(682);
Double d = new Double(2.33);
Boolean b = new Boolean(false);
}
Wrapper sapaklary, başlangyç görnüşleriň bar bolan kemçiliklerini azaltmaga mümkinçilik berýär. Iň göze görnüp duran zat,
ilkinjileriň usullary ýok . Mysal üçin, olaryň usuly ýok , şonuň üçin sanlary setire
toString()
öwrüp bilmersiňiz .
int
Aöne örtük synpy bilen
Integer
bu aňsat.
public static void main(String[] args) {
Integer i = new Integer(432);
String s = i.toString();
}
Ters öwrülişikde kynçylyklar hem bolar. Elbetde, bir san bar diýip bilýän setirimiz bar diýeliň. Şeýle-de bolsa, ýönekeý görnüş bolan ýagdaýynda,
int
bu belgini setirden alyp, hakykatda bir sana öwrüp bilmeris. Emma sapak sapaklarynyň kömegi bilen indi bu mümkinçiligimiz bar.
public static void main(String[] args) {
String s = "1166628";
Integer i = Integer.parseInt(s);
System.out.println(i);
}
Çykyş: 1166628 Bir setirden üstünlikli çykardyk we salgylanma üýtgeýjisine belledik
Integer i
. .Eri gelende aýtsak, baglanyşyklar hakda. Parametrleriň dürli usullar bilen usullara geçirilýändigini eýýäm bilýärsiňiz: başlangyçlar bahadan, obýektler bolsa salgylanma arkaly geçirilýär.
Double/Float
Usullaryňyzy döredeniňizde bu bilimleri ulanyp bilersiňiz: usulyňyz, mysal üçin, fraksiýa sanlary bilen işleýän bolsa, ýöne salgylanmadan geçmegiň logikasy gerek bolsa, ýerine parametrleri parametrlere geçirip bilersiňiz
double/float
. Mundan başga-da, usullardan başga-da, örtük synplarynda ulanmak üçin amatly statiki meýdanlar bar. Mysal üçin, indi bir mesele bilen ýüzbe-ýüz bolmagyňyzy göz öňüne getiriň:
mümkin bolan iň köp san konsola int
, soňra bolsa mümkin bolan iň az belgini çap ediň. Wezipe başlangyç ýaly bolup görünýär, ýöne şonda-da, Google-dan peýdalanyp bilmersiňiz. Örtük sapaklary aşakdaky “gündelik meseleleri” çözmäge aňsatlyk bilen mümkinçilik berýär:
public class Main {
public static void main(String[] args) {
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
}
}
Şeýle meýdanlar has çynlakaý meselelerden daşlaşmaga mümkinçilik berýär.
2147483647 belgisini çap etmek işinde (bu MAX_VALUE takyk) ýalňyş ýazmak geň däldir :) Mundan başga-da, öňki leksiýalaryň birinde eýýäm
örtük synplarynyň obýektleriniň ünsüni çekdik.
üýtgewsizdir .
public static void main(String[] args) {
Integer a = new Integer(0);
Integer b = new Integer(0);
b = a;
a = 1;
System.out.println(b);
}
Çykyş: 0 Ilki salgylanmanyň görkezen obýekti
а
ýagdaýyny üýtgetmedi, ýogsam bahasy
b
hem üýtgärdi. Edil bolşy ýaly
String
, örtük obýektiniň ýagdaýyny üýtgetmegiň ýerine, ýatda düýbünden täze bir zat döredilýär. Näme üçin “Java” döredijileri ahyrky görnüşde dilde saklamagy karar etdiler? Hemme zat obýekt bolmaly we bizde eýýäm primitiwleriň aňladýan zatlaryny aňlatmak üçin ulanyp boljak sapak sapaklary bar, näme üçin olary diňe dilde goýup, ilkinjileri aýyrmaly däl? Jogap ýönekeý - ýerine ýetiriş. Ilkinji görnüşlere başlangyç diýilýär, sebäbi obýektleriň köp “agyr” aýratynlyklaryndan mahrum. Hawa, bir obýektiň köp amatly usullary bar, ýöne olara hemişe zerurlyk ýok. Käwagt diňe 33, ýa-da 2.62, ýa-da bahasy
true
gerek
false
. Obýektleriň ähli artykmaçlyklary ähmiýetsiz we programmanyň işlemegi üçin zerur bolmadyk ýagdaýlarda, ilkinjiler has gowy iş eder.
Awto-gaplamak / awtomatik gaplamak
Java-da primitiwleriň we olaryň deri sapaklarynyň aýratynlyklaryndan biri awtoboksirlemek / awtobokslamakdyr.
Geliň bu düşünjä düşüneliň. Siziň we öňem öwrenişimiz ýaly, Java obýekte gönükdirilen dil. Bu Java-da ýazylan ähli programmalaryň obýektlerden ybaratdygyny aňladýar. Ilkinjiler obýekt däl. Şeýle-de bolsa, örtük synpynyň üýtgeýjisine başlangyç görnüşiň bahasy bellenilip bilner. Bu prosese
awtobokslamak diýilýär
. Edil şonuň ýaly, başlangyç görnüşiň üýtgeýjisine örtük synpynyň obýekti berlip bilner.
Bu prosese awto-boks diýilýär . Mysal üçin:
public class Main {
public static void main(String[] args) {
int x = 7;
Integer y = 111;
x = y;
y = x * 123;
}
}
5-nji setirde, örtük synpynyň obýekti bolan başlangyç x bahasyny y belläris
Integer
. Görşüňiz ýaly, munuň üçin goşmaça hereketler gerek däl:
düzüji muny bilýär int
we Integer
aslynda şol bir zady . Bu awtomatiki usulda açylýar. 6-njy setirde awtobokslamak bilen hem edil şonuň ýaly zat bolýar: y obýekti başlangyçlaryň bahasyna aňsatlyk bilen berilýär (x * 123). Bu awtomatiki ýüklemegiň mysaly. Şonuň üçin “awto” sözi goşulýar:
örtük synplarynyň obýektlerine başlangyç salgylanmalary bellemek üçin (we tersine) hiç zat etmegiň zerurlygy ýok, hemme zat awtomatiki bolýar . Amatly, şeýlemi? :) Awto-gaplamak / awtomatik gaplamagyň başga bir amatlylygy, usullaryň işleýşinde ýüze çykýar. Hakykat,
usul parametrleriniň awtomatiki usulda we awtomatiki usulda ýüklenmegine degişlidir . Mysal üçin, olaryň biri giriş hökmünde iki zady alsa
Integer
, adaty primitivleri ol ýerden aňsatlyk bilen geçirip bileris
int
!
public class Main {
public static void main(String[] args) {
printNumber(7);
}
public static void printNumber(Integer i) {
System.out.println("You entered a number" + i);
}
}
Çykyş: 7-nji belgini girizdiňiz .
public class Main {
public static void main(String[] args) {
printNumber(new Integer(632));
}
public static void printNumber(int i) {
System.out.println("You entered a number" + i);
}
}
Rememberatda saklamaly möhüm bir zat:
awtobokslamak we gutulmak massiwlerde işlemeýär !
public class Main {
public static void main(String[] args) {
int[] i = {1,2,3,4,5};
printArray(i);
}
public static void printArray(Integer[] arr) {
System.out.println(Arrays.toString(arr));
}
}
Ilkinjileriň bir toparyny giriş hökmünde kabul edýän usula geçirmäge synanyşmak, düzme ýalňyşlygyna sebäp bolar. Ahyrynda, ýene bir gezek primitiwleri we örtükleri gysgaça deňeşdireliň
:
- öndürijilik artykmaçlygyna eýe
Wrappers:
- Sanlar, nyşanlar we hakyky / ýalan bahalar bu düşünjeden çykmaz ýaly, “hemme zat bir zat” ýörelgesini bozmazlyga mümkinçilik berýär.
- Amatly usullary we meýdanlary üpjün edip, bu gymmatlyklar bilen işlemek ukybyny giňeldiň
- Käbir usul diňe obýektler bilen işläp bilse zerur
GO TO FULL VERSION